Cette question est liée à ma vieille question . L'exécution de la requête ci-dessous prenait 10 à 15 secondes:
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)
Dans certains articles, j'ai vu que l'utilisation CAST
et CHARINDEX
ne bénéficiera pas de l'indexation. Certains articles indiquent également que l'utilisation LIKE '%abc%'
ne bénéficiera pas de l'indexation, alors que LIKE 'abc%'
:
http://bytes.com/topic/sql-server/answers/81467-using-charindex-vs-like-where /programming/803783/sql-server-index-any-improvement-for -like-queries http://www.sqlservercentral.com/Forums/Topic186262-8-1.aspx#bm186568
Dans mon cas, je peux réécrire la requête comme suit:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [company].dbo.[customer]
WHERE [company].dbo.[customer].[Phone no] LIKE '%123456789%'
Cette requête donne la même sortie que la précédente. J'ai créé un index non cluster pour la colonne Phone no
. Lorsque j'exécute cette requête, elle s'exécute en seulement 1 seconde . C'est un énorme changement par rapport aux 14 secondes précédentes.
Quels sont les LIKE '%123456789%'
avantages de l'indexation?
Pourquoi les articles répertoriés indiquent-ils que cela n'améliorera pas les performances?
J'ai essayé de réécrire la requête à utiliser CHARINDEX
, mais les performances sont toujours lentes. Pourquoi ne CHARINDEX
bénéficie pas de l'indexation comme il semble que la LIKE
requête en bénéficie ?
Requête en utilisant CHARINDEX
:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [Company].dbo.[customer]
WHERE ( Charindex('9000413237',[Company].dbo.[customer].[Phone no])>0 )
Plan d'exécution:
Requête en utilisant LIKE
:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [Company].dbo.[customer]
WHERE[Company].dbo.[customer].[Phone no] LIKE '%9000413237%'
Plan d'exécution: