Questa domanda è collegata alla mia vecchia domanda . La query di seguito impiegava da 10 a 15 secondi per l'esecuzione:
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)
In alcuni articoli ho visto che l'utilizzo CAST
e CHARINDEX
non trarrà beneficio dall'indicizzazione. Ci sono anche alcuni articoli che affermano che l'utilizzo LIKE '%abc%'
non trarrà vantaggio dall'indicizzazione mentre 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
Nel mio caso posso riscrivere la query come:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [company].dbo.[customer]
WHERE [company].dbo.[customer].[Phone no] LIKE '%123456789%'
Questa query fornisce lo stesso output del precedente. Ho creato un indice non cluster per la colonna Phone no
. Quando eseguo questa query, viene eseguita in solo 1 secondo . Questo è un grande cambiamento rispetto a 14 secondi prima.
In che modo LIKE '%123456789%'
beneficia dell'indicizzazione?
Perché gli articoli elencati indicano che non migliorerà le prestazioni?
Ho provato a riscrivere la query da utilizzare CHARINDEX
, ma le prestazioni sono ancora lente. Perché CHARINDEX
non beneficia dell'indicizzazione come sembra la LIKE
query?
Interrogazione utilizzando CHARINDEX
:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [Company].dbo.[customer]
WHERE ( Charindex('9000413237',[Company].dbo.[customer].[Phone no])>0 )
Progetto esecutivo:
Interrogazione utilizzando LIKE
:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [Company].dbo.[customer]
WHERE[Company].dbo.[customer].[Phone no] LIKE '%9000413237%'
Progetto esecutivo: