2012-03-05 4 views
2

입니다. Sql Server에 대한 많은 기사에서 쿼리를 작성할 때 NOT 및 LIKE 연산자를 사용해서는 안됩니다. 색인 생성이 적용되지 않습니다.인덱싱은 SQL Server에서 LIKE 및 NOT 연산자와 작동하지 않습니다. MYTH는

예 :

SELECT [CityId] 
     ,[CityName] 
     ,[StateId] 
    FROM [LIMS].[dbo].[City] 
    WHERE CityId NOT IN(1, 2) 

위의 쿼리를 실행했는데 인덱싱이 레코드를 필터링하는 데 사용되는 것으로 나타났습니다. 다음은 Clustered Index seek을 명확하게 보여주는 실행 계획입니다. 이것은 내가 생각하고 읽었던 것을 명백히 위반합니다.

enter image description here

내 이전 이해가 잘못 되었습니까?

+1

검색 조건에 따라 다릅니다. 예를 들어, LIKE 연산자의 경우이 기사를 확인하십시오 ... http://use-the-index-luke.com/sql/where-clause/searching-for-ranges/like- 성능 튜닝 –

+0

@BhrugeshPatel : 이미 해당 기사를 보았습니다. 제 사무실에서도 NOT과 LIKE 연산자를 피하는 문서를 보았습니다. 좋아요. 꽤 이해할 수 있습니다.하지만 색인 생성이이 부분에서 사용되지 않는 이유는 나를 위해 소화하기가 어렵습니다. –

+0

글쎄, LIKE의 경우 검색이 %로 시작하면 what-so-ever 인덱스를 사용할 아무런 포인트가 없다. 그렇지 않으면 검색 문자열이 고정 문자로 시작되므로 색인 사용은 매우 그럴듯합니다. John이 말했듯이, 모든 데이터베이스는 알고리즘에 따라 사용 가능한 최상의 방법으로 갈 것입니다. –

답변

2

해당 인덱싱은 LIKE 및 NOT 연산자와 작동하지 않습니다. SQL Server (또는 관련 RDBMS)는 에서 가장 좋은 알고리즘을 사용합니다. 대부분입니다. 따라서 은 수동으로 인덱스를 찾을 수 있으므로 SQL Server도 마찬가지입니다.

제공 한 특정 예제에서 대부분의 레코드가 아무렇게나 반환되기 때문에 검색보다 검색이 더 효율적인지 여부가 확실하지 않습니다. 그래서 저는 그 특정한 실행 계획을별로 읽지 않을 것입니다.

하단 라인 : 데이터베이스 시스템이 데이터 및 색인을 내부적으로 구성하여 어림짐작에 의지하지 않아도되는지 배우고 이해하십시오.