이 질문은 나의 오래된 질문 과 관련이 있습니다. 아래 쿼리는 실행하는 데 10-15 초가 걸렸습니다.
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [company].dbo.[customer]
WHERE (Charindex('123456789',CAST([company].dbo.[customer].[Phone no] AS VARCHAR(MAX)))>0)
일부 기사에서 나는 사용하는 것을보고 CAST
및 CHARINDEX
색인에서 혜택을받지 않습니다. 사용하는 것이 LIKE '%abc%'
색인 생성의 이점을 얻지 못한다고 말하는 기사도 있습니다 LIKE 'abc%'
.
http://bytes.com/topic/sql-server/answers/81467-using-charindex-vs-like-where /programming/803783/sql-server-index-any-improvement-for 같은 쿼리 http://www.sqlservercentral.com/Forums/Topic186262-8-1.aspx#bm186568
제 경우에는 다음과 같이 쿼리를 다시 작성할 수 있습니다.
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [company].dbo.[customer]
WHERE [company].dbo.[customer].[Phone no] LIKE '%123456789%'
이 쿼리는 이전 쿼리와 동일한 출력을 제공합니다. column에 대한 비 클러스터형 인덱스를 만들었습니다 Phone no
. 이 쿼리를 실행하면 1 초 안에 실행됩니다 . 이것은 이전의 14 초 와 비교했을 때 큰 변화 입니다.
어떻게 LIKE '%123456789%'
색인에서 혜택을?
나열된 기사가 성능을 향상시키지 않을 이유가 무엇입니까?
사용할 쿼리를 다시 쓰려고 CHARINDEX
했지만 성능이 여전히 느립니다. 쿼리 CHARINDEX
에서처럼 인덱싱의 이점 이 없는 이유는 무엇 LIKE
입니까?
다음을 사용하여 쿼리 CHARINDEX
:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [Company].dbo.[customer]
WHERE ( Charindex('9000413237',[Company].dbo.[customer].[Phone no])>0 )
실행 계획 :
다음을 사용하여 쿼리 LIKE
:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [Company].dbo.[customer]
WHERE[Company].dbo.[customer].[Phone no] LIKE '%9000413237%'
실행 계획 :