Це питання пов'язане з моїм старим питанням . Наведений нижче запит знадобився від 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 -like-запити 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%'
Цей запит дає такий же вихід, як і попередній. Я створив некластеризований індекс для стовпця 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%'
План виконання:
