나는 내가 그 쿼리를 빠르게 만들려고이쿼리가 테이블에 대해 둘 이상의 비 클러스터형 인덱스를 사용할 수 있습니까?
SELECT TOP 1000 C.iId_company
FROM dbo.Company AS C WITH(NOLOCK)
WHERE
C.col_1 LIKE 'something%'
OR C.col_1 LIKE 'something2%'
OR C.col_1 LIKE 'something3%'
OR C.col_2 LIKE 'something%'
OR C.col_2 LIKE 'something2%'
OR C.col_2 LIKE 'something3%'
과 같은 쿼리를 가지고 있고, 나는 컬럼 col_1 및 col_2에는에 인덱스를 추가했습니다. col_2에 관한 조건을 주석으로 처리하면 쿼리는 매우 빠르며 col_1 (col_1에 대한 조건을 주석으로 처리하는 경우)과 동일합니다. 그러나 내가 그렇게 그것을 떠날 때, 그것은 매우 오래된 느린 이야기입니다.
실행 계획을 살펴본 결과 의심되는 점은 한 번에 하나의 인덱스 만 사용되고 SQL은 첫 번째 인덱스가 사용 된 후 SQL에서 하위 집합 스캔을 수행한다는 것입니다. 나는 다른 것들을 시도했다. (두 컬럼의 인덱스를 만들지 만 또한 작동하지 않는다.)
실제로 유일한 해결책은 쿼리를 분할하고 UNION을 사용하는 것이다. 그런 종류의 쿼리를 더 빠르게 만들고 한 쿼리에서 유지할 수있는 방법이 있습니까?
'OPTION (FORCESEEK) '힌트를 사용하면 어떨까요? 그렇다면 그것은 인덱스 조합을 수행합니까? –
@Martin이 경우 두 열 모두에서 색인을 생성 할 수 없습니까? – rsbarro
@rsbarro. 그것들이 복합 인덱스'col1, col2' 또는'col2, col1'을 생성한다면'col_1 LIKE 'something %'또는'col_2 LIKE 'something %''에 대해서만 탐색 될 것입니다. 다른 'OR'표준을 결정하기 위해 여전히 전체 색인을 스캔해야합니다. –