개요
SQL 서버는 다양한 이유로 인덱싱을 타지 않을 때가 있다. 데이터가 많은데 인덱싱을 타지 않는 문제가 발생하면, 디비가 매우 느려진 것으로 착각하기 쉽다. 일반적으로 SQL SERVER 의 VARIABLE 타입 매칭이 잘 되지 않을 때 인덱싱을 타지 않는 문제가 많이 발생한다.
가끔 너무 깊은 DEPTH에 변수가 있을 때 인덱싱을 타지 않는다
- 여기서 DEPTH 가 깊다고 쓴 것은 서브쿼리 내부의 서브쿼리와 같은 경우를 의미한다.
- 종종 OPTION(RECOMPILE) 을 이용해 인덱싱을 타게 만들 수 있다.
- 단, PLAN에서는 인덱싱을 안타는 것으로 보이며 실행할 때만 적용된다.
프로시저의 매개변수를 그대로 이용했을 때 인덱싱을 타지 않는다
- VARIABLE 을 새로 선언하고 SET 으로 다시 재할당해주는 방식으로 시도했을 때 되는 경우가 있다.
ALTER PROC [dbo].[xxx]
@a_ Varchar(100),
@b_ Varchar(12),
@c_ Varchar(2)
AS
BEGIN
SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
-- 재할당
DECLARE @a Varchar(100);
SET @a = @a;
-- 재할당
DECLARE @b Varchar(12);
SET @b = @b_;
-- 재할당
DECLARE @c Varchar(2);
SET @c = @c_;
Mybatis 와 같은 매퍼의 타입과 디비 테이블의 타입이 일치하지 않아서 인덱싱을 타지 않는다
- 이 경우는
varchar
,nvarchar
를 섞어쓰지 않고, 하나를 지정해서 제대로 쓰면 된다.
관련 아티클 - Impact on indexes when mixing varchar and nvarchar types
반응형
'데이터베이스 > MSSQL' 카테고리의 다른 글
MSSQL 에서 1~10000 까지의 숫자 반복하여 출력하기 (0) | 2022.06.01 |
---|---|
MSSQL 실무 쿼리 튜닝법 (0) | 2022.06.01 |
MSSQL (SQL Server) 에서 테이블의 주석 확인하는 방법 (0) | 2022.06.01 |
MSSQL (SQL Server) 에서 느린 쿼리 (슬로우 쿼리) 확인하는 방법 (0) | 2022.06.01 |
SQL Server, DB 인덱싱 간단 정리 (0) | 2021.12.26 |