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 CASTund CHARINDEXnicht 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 CHARINDEXprofitiert die Indizierung nicht, wie es scheint, dass die LIKEAbfrage 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:
