전체 텍스트 색인을 사용하여 제품 (250,000 행)을 검색하는 저장된 proc가 있습니다.왜이 두 쿼리의 성능이 다릅니 까?
저장된 proc는 전체 텍스트 검색 조건 인 매개 변수를 사용합니다. 이 매개 변수는 null 일 수 있으므로 null 확인을 추가하면 쿼리가 갑자기 순서가 느리게 실행되기 시작했습니다.
쿼리 # 1
쿼리 # 2
내가 실행 계획에 매우 익숙하지 않은임을 인정해야합니다
-- This is normally a parameter of my stored proc
DECLARE @Filter VARCHAR(100)
SET @Filter = 'FORMSOF(INFLECTIONAL, robe)'
-- #1 - Runs < 1 sec
SELECT TOP 100 ID FROM dbo.Products
WHERE CONTAINS(Name, @Filter)
-- #2 - Runs in 18 secs
SELECT TOP 100 ID FROM dbo.Products
WHERE @Filter IS NULL OR CONTAINS(Name, @Filter)
다음은 실행 계획이다. 유일한 차이점은 조인이 다르다는 것입니다. 힌트를 추가하려고하지만 내 쿼리에 조인을하지 않으면 어떻게 할 지 모르겠다.
IX_SectionID라는 인덱스가 사용 된 이유는 그것이 ColumnID 만 포함하고 그 열은 어디에도 사용되지 않은 인덱스이기 때문에 이해가되지 않습니다.
멋진 기사 - OPTION (RECOMPILE)'추가'실제로 2 쿼리의 성능 문제를 (해결하지만 또 다른 문제는'()'인상이 포함되어 있습니다 매개 변수가 NULL이지만 다른 문제 인 경우 오류). –