[MSSQL] 인덱스 힌트 사용법 (Index Hint)
- 데이터베이스/MSSQL
- 2022. 4. 18.
SQL Server에서 쿼리 문의 실행 계획을 보면 잘못된 인덱스를 타서 조회 속도가 느린 경우가 간혹 발생한다. 이럴 경우 인덱스 힌트를 강제로 부여하여 실행 계획을 바꾸면 조회 속도가 빨라지는 경우가 있다. 인덱스 힌트를 강제로 부여하는 방법은 권장하는 방법이 아니며 옵티마이저에 의한 최적의 실행 계획으로 쿼리문이 실행되도록 하는 것이 좋다.
목차 |
인덱스 힌트 사용법
SELECT *
FROM emp WITH (INDEX(emp_idx01))
WHERE hiredate BETWEEN '1981-01-01' AND '1981-12-31'
FROM [테이블명] WITH (INDEX([인덱스명]))
인덱스 힌트를 사용했을 경우와 사용하지 않았을 경우 쿼리문 실행 계획이 달라지는 것을 확인할 수 있다. 인덱스 힌트를 사용하지 않으면 옵티마이저가 최적의 실행 계획을 만들어서 실행한다. 가끔 가다가 옵티마이저가 잘못된 인덱스를 타는 경우가 있는데 그때 인덱스 힌트를 사용하며 평상시에는 사용하지 않는 것이 좋다.
/* WITH (INDEX(emp_idx01))와 동일함 */
SELECT *
FROM emp WITH (INDEX = emp_idx01)
WHERE hiredate BETWEEN '1981-01-01' AND '1981-12-31'
;
/* WITH (NOLOCK)과 함께 사용하는 경우 */
SELECT *
FROM emp WITH (NOLOCK, INDEX(emp_idx01))
WHERE hiredate BETWEEN '1981-01-01' AND '1981-12-31'
;
/* 인덱스 힌트를 여러개 사용하는 경우 */
SELECT *
FROM emp WITH (INDEX(emp_idx01, emp_idx02))
WHERE hiredate BETWEEN '1981-01-01' AND '1981-12-31'
WITH (INDEX([인덱스명]))와 WITH (INDEX = [인덱스명])은 동일한 문법이다.
쿼리문 실행 계획 보는 법
쿼리 문의 실행 계획을 보는 방법은 SSMS(SQL Server Management Studio) 툴에서
실행 버튼 옆 예상 실행 계획 표시 (Ctrl + L) 버튼을 누르면 실행 계획을 확인할 수 있다.