반응형
WITH INDEX 인덱스 강제 설정
먼저, 인덱스에 대해 간단히 설명해보면
- 인덱스란 지정 칼럼을 기준으로 일종의 목차를 생성하는 것이다. (조회 성능 향상)
- MSSQL은 비용기반 옵티마이저를 사용한다.
비용 기반이란 데이터의 통계에 따라 실행계획이 세워지는 것
- 인덱스를 생성해놓은 테이블은 옵티마이저에서 자동으로 선택하여 인덱스를 사용한다.
(단, 특정 쿼리의 경우 인덱스가 정상적으로 사용되지 않을 수 있음)
이렇게 옵티마이저가 최적의 인덱스를 찾아 사영하지만, 가끔 엉뚱한 인덱스를 타거나 테이블을 풀스캔 하는 경우가 발생한다.
자 그럼 본격적으로 내가 원하는 인덱스를 강제로 설정해보자
FROM 테이블 뒤에 WITH (INDEX(인덱스명))을 사용하면 된다.
SELECT 칼럼 FROM 테이블 WITH (INDEX=인덱스명)
SELECT 칼럼 FROM 테이블 WITH (INDEX(인덱스명))
SELECT 칼럼 FROM 테이블 WITH (INDEX(인덱스명1,인덱스명2))
테이블 인덱스 확인
sp_helpindex '테이블명'
예제
1) 인덱스명 확인
sp_helpindex 'ggmouse'
2) 인덱스 강제로 설정
SELECT A.*
FROM table_ggmouse A WITH (INDEX(NX_table_ggmouse_age))
INNER JOIN table_ggmouse2 B ON A.age = B.age
반응형
'프로그래밍 > MSSQL' 카테고리의 다른 글
[MSSQL] 문자열이나 이진 데이터는 잘립니다 (2) | 2020.02.05 |
---|---|
[MSSQL] LEN / DATALENGTH (문자열의 문자 수 / 바이트 수) (0) | 2020.02.05 |
[MSSQL] ARITHABORT (웹 서비스단 프로시저 timeout 이슈) (1) | 2020.01.31 |
[MSSQL] RECOMPILE 저장 프로시저 리컴파일 (c# 프로시저 timeout 에러) (0) | 2020.01.30 |
[MSSQL] NOT MATCHED BY SOURCE ('DELETE' 유형의 동작은 MERGE 문의 'WHEN NOT MATCHED' 절에 사용할 수 없습니다.) (0) | 2020.01.07 |