쿼리 결과를 최적화 시키는 방법 중 하나가 쿼리 내 조건절에 인덱싱이 되어 있는 컬럼을 활용하여 

옵티마이저(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

 

읽어주셔서 감사합니다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기