SQL-데이터베이스 튜닝
데이터베이스 전문가 또는 전문 데이터베이스 관리자가 되려면 시간이 걸립니다. 이 모든 것은 다양한 데이터베이스 설계와 훌륭한 교육에 대한 많은 경험과 함께 제공됩니다.
그러나 다음 목록은 초보자가 좋은 데이터베이스 성능을 갖는 데 도움이 될 수 있습니다.
RDBMS 개념 장에서이 튜토리얼에 설명 된 3BNF 데이터베이스 디자인을 사용하십시오.
숫자와 문자가 다르게 비교되고 성능이 저하되므로 숫자를 문자로 변환하지 마십시오.
SELECT 문을 사용하는 동안 필요한 정보 만 가져오고 SELECT 쿼리에 *를 사용하지 마십시오. 시스템이 불필요하게로드 될 수 있기 때문입니다.
검색 작업이 빈번한 모든 테이블에서 신중하게 인덱스를 생성하십시오. 검색 작업 수가 적고 삽입 및 업데이트 작업 수가 많은 테이블에 대한 색인을 피하십시오.
전체 테이블 스캔은 WHERE 절의 열에 연관된 색인이 없을 때 발생합니다. SQL 문의 WHERE 절에서 조건으로 사용되는 열에 인덱스를 생성하여 전체 테이블 스캔을 피할 수 있습니다.
실수와 날짜 / 시간 값이있는 같음 연산자에주의하십시오. 둘 다 눈에 분명하지 않지만 정확한 일치를 불가능하게 만드는 작은 차이가있을 수 있으므로 쿼리에서 행을 반환하지 못합니다.
패턴 일치를 신중하게 사용하십시오. LIKE COL %는 유효한 WHERE 조건으로, 반환 된 집합을 문자열 COL로 시작하는 데이터가있는 레코드로만 줄입니다. 그러나 COL % Y는 % Y를 효과적으로 평가할 수 없기 때문에 반환 된 결과 집합을 더 이상 줄이지 않습니다. 평가를 수행하려는 노력이 너무 커서 고려할 수 없습니다. 이 경우 COL %가 사용되지만 % Y는 버려집니다. 같은 이유로 선행 와일드 카드 % COL은 전체 필터가 사용되는 것을 효과적으로 방지합니다.
쿼리 (및 하위 쿼리)의 구조 인 SQL 구문을 검사하는 SQL 쿼리를 미세 조정하여 빠른 데이터 조작을 지원하도록 테이블을 설계하고 최적의 방식으로 쿼리를 작성하여 DBMS가 데이터를 효율적으로 조작 할 수 있도록합니다. .
정기적으로 실행되는 쿼리의 경우 프로 시저를 사용해보십시오. 프로시 저는 잠재적으로 큰 SQL 문 그룹입니다. 프로시 저는 데이터베이스 엔진에 의해 컴파일 된 다음 실행됩니다. SQL 문과 달리 데이터베이스 엔진은 실행되기 전에 프로 시저를 최적화 할 필요가 없습니다.
가능하면 쿼리에서 논리 연산자 OR을 사용하지 마십시오. 또는 실질적인 크기의 테이블에 대한 거의 모든 쿼리를 필연적으로 느리게합니다.
인덱스를 삭제하여 대량 데이터로드를 최적화 할 수 있습니다. 수천 개의 행이있는 히스토리 테이블을 상상해보십시오. 해당 히스토리 테이블에는 하나 이상의 인덱스가있을 수도 있습니다. 인덱스를 생각할 때 일반적으로 더 빠른 테이블 액세스를 생각하지만 일괄로드의 경우 인덱스를 삭제하여 이점을 얻을 수 있습니다.
일괄 트랜잭션을 수행 할 때 모든 레코드 생성 후 생성하는 대신 상당한 수의 레코드 생성 후 COMMIT를 수행합니다.
주별 루틴을 개발하는 것을 의미하더라도 정기적으로 데이터베이스 조각 모음을 계획하십시오.
내장 튜닝 도구
Oracle에는 SQL 문 성능을 관리하기위한 많은 도구가 있지만 그 중에서 두 가지가 매우 인기가 있습니다. 이 두 도구는-
Explain plan − 도구는 SQL 문이 실행될 때 사용할 액세스 경로를 식별합니다.
tkprof − SQL 문 처리의 각 단계에서 경과 된 시간별로 성능을 측정합니다.
Oracle에서 쿼리의 경과 시간을 간단히 측정하려는 경우 SQL * Plus 명령 SET TIMING ON을 사용할 수 있습니다.
위에서 언급 한 도구 및 데이터베이스 조각 모음에 대한 자세한 내용은 RDBMS 설명서를 확인하십시오.