안녕하세요.
DECLARE @AAAA VARCHAR(MAX);
SET @ExpenseIDs = N'1,2,3,4,5,6';
SELECT *
FROM [TABLE]
WHERE (
(@AAAA IS NULL)
OR ([column] IN (SELECT [value] FROM dbo.SplitString(@AAAA, ',')))
)
위에와 같이, 테이블의 컬럼의 아이디 모음(@AAAA)을 가지고
테이블 조회를 하려고 합니다.
이때 데이터 조회가 너무 느리더라구요. 테이블을 전체 조회하는 느낌이 듭니다.
근데 (@AAAA IS NULL) OR 조건을 빼면 빠릅니다.
이유가 무엇일까요?ㅠㅜ
해당 컬럼에 인덱스가 있다는 가정하에
조회 조건이 들어오는 경우에는 인덱스 스캔
들어 오지 않는 경우에는 풀스캔으로 실행계획이 분리되어야 합니다.
그러나 느리다면 하나의 실행계획(풀스캔)으로만 풀리는게 아닐까요?
실행계획 확인해 보세요.
UNION ALL 로 쿼리 자체를 분리시켜 보세요.
SELECT * FROM [TABLE] WHERE @AAAA IS NULL UNION ALL SELECT * FROM [TABLE] WHERE @AAAA IS NOT NULL AND [column] IN (SELECT [value] FROM dbo.SplitString(@AAAA, ',')) ;