Этот вопрос связан с моим старым вопросом . Приведенный ниже запрос занимал от 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%'
Этот запрос дает тот же результат, что и предыдущий. Я создал некластеризованный индекс для столбца 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%'
План выполнения: