쿼리 결과를 최적화 시키는 방법 중 하나가 쿼리 내 조건절에 인덱싱이 되어 있는 컬럼을 활용하여
옵티마이저(Optimizer)가 인덱스와 결합하여 쿼리 결과를 제한하는 것입니다.
쿼리 개발 시 WHERE 절에 SARG(Search arguments)를 이용한다면 인덱스 페이지를 사용하여
인덱스 검색(Index Seek)을 할 수 있으며 그렇지 않은 경우 모든 페이지를 검색(Table Scan)합니다.
아래와 같이 간단한 규칙만 지킨다면 쿼리 조회결과 향상에 도움이 될 수 있습니다.
[예제 쿼리]
/* 1. 데이터 형변환 시 index 사용불가. */
WHERE Name = 'Smith' -- SARG
WHERE Price = '10000' -- NON-SARG
/* 2. 관계연산자 != 대신 <> 연산자 권장 */
WHERE Price < 10000 -- SARG
WHERE Price != 10000 -- NON-SARG
/* 3. 데이터 가공(연산,함수) 시 Index 사용불가 */
WHERE Price = 120/12 -- SARG
WHERE Name like 'C%' -- SARG
WHERE Price*12 = 1200 -- NON-SARG
WHERE substring(Name,1,3) = 'S' -- NON-SARG
/* 4. 조회범위는 작게! */
WHERE Price BETWEEN 1 AND 10 -- SARG
WHERE Price < 1 OR Price > 10 -- NON-SARG
/* 5. Index를 사용하기 위해서는 초성이 필수! */
WHERE Name like 'Smith%' -- SARG
WHERE Name like '%Smith' -- NON-SARG
읽어주셔서 감사합니다.
반응형
최근댓글