Bu soru eski sorumla ilgili . Aşağıdaki sorgu yürütmek için 10 ila 15 saniye sürüyordu:
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)
Bazı makalelerde endekslemenin kullanıldığını CAST
ve CHARINDEX
faydalanmayacağını gördüm . Kullanırken LIKE '%abc%'
indekslemeden yararlanmayacağını söyleyen bazı makaleler de var LIKE 'abc%'
:
http://bytes.com/topic/sql-server/answers/81467-using-charindex-vs-like-where /programming/803783/sql-server-index-any-improvement-for benzeri sorgular http://www.sqlservercentral.com/Forums/Topic186262-8-1.aspx#bm186568
Benim durumumda sorguyu şu şekilde yeniden yazabilirim:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [company].dbo.[customer]
WHERE [company].dbo.[customer].[Phone no] LIKE '%123456789%'
Bu sorgu öncekiyle aynı çıktıyı verir. Sütun için kümelenmemiş bir dizin oluşturdum Phone no
. Bu sorguyu çalıştırdığımda sadece 1 saniyede çalışıyor . Bu daha önce 14 saniye ile karşılaştırıldığında büyük bir değişiklik .
LIKE '%123456789%'
İndekslemeden nasıl yararlanır?
Listelenen makaleler neden performansı artırmayacağını belirtiyor?
Kullanılacak sorguyu yeniden yazmaya çalıştım CHARINDEX
, ancak performans hala yavaş. Neden sorgu CHARINDEX
göründüğü gibi indekslemeden faydalanmıyor LIKE
?
Kullanarak sorgula CHARINDEX
:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [Company].dbo.[customer]
WHERE ( Charindex('9000413237',[Company].dbo.[customer].[Phone no])>0 )
Yürütme planı:
Kullanarak sorgula LIKE
:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [Company].dbo.[customer]
WHERE[Company].dbo.[customer].[Phone no] LIKE '%9000413237%'
Yürütme planı: