Diese Frage hängt mit meiner alten Frage zusammen . Die folgende Abfrage dauerte 10 bis 15 Sekunden:
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 einigen Artikeln habe ich gesehen, dass die Verwendung von CAST
und CHARINDEX
nicht von der Indizierung profitieren. Es gibt auch einige Artikel, die besagen, dass die Verwendung von LIKE '%abc%'
nicht von der Indizierung profitiert, während LIKE 'abc%'
:
http://bytes.com/topic/sql-server/answers/81467-using-charindex-vs-like-where /programming/803783/sql-server-index-any-improvement-for -like-Abfragen http://www.sqlservercentral.com/Forums/Topic186262-8-1.aspx#bm186568
In meinem Fall kann ich die Abfrage wie folgt umschreiben:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [company].dbo.[customer]
WHERE [company].dbo.[customer].[Phone no] LIKE '%123456789%'
Diese Abfrage liefert die gleiche Ausgabe wie die vorherige. Ich habe einen nicht gruppierten Index für die Spalte erstellt Phone no
. Wenn ich diese Abfrage ausführe, dauert sie nur 1 Sekunde . Dies ist eine enorme Veränderung im Vergleich zu 14 Sekunden zuvor.
Wie LIKE '%123456789%'
profitiert die Indizierung?
Warum wird in den aufgelisteten Artikeln angegeben, dass die Leistung nicht verbessert wird?
Ich habe versucht, die zu verwendende Abfrage neu zu schreiben CHARINDEX
, aber die Leistung ist immer noch langsam. Warum CHARINDEX
profitiert die Indizierung nicht, wie es scheint, dass die LIKE
Abfrage dies tut?
Abfrage mit CHARINDEX
:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [Company].dbo.[customer]
WHERE ( Charindex('9000413237',[Company].dbo.[customer].[Phone no])>0 )
Ausführungsplan:
Abfrage mit LIKE
:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [Company].dbo.[customer]
WHERE[Company].dbo.[customer].[Phone no] LIKE '%9000413237%'
Ausführungsplan: