Pertanyaan ini terkait dengan pertanyaan lama saya . Query di bawah ini membutuhkan 10 hingga 15 detik untuk dieksekusi:
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)
Dalam beberapa artikel saya melihat bahwa menggunakan CAST
dan CHARINDEX
tidak akan mendapat manfaat dari pengindeksan. Ada juga beberapa artikel yang mengatakan menggunakan LIKE '%abc%'
tidak akan mendapat manfaat dari pengindeksan sementara LIKE 'abc%'
akan:
http://bytes.com/topic/sql-server/answers/81467-using-charindex-vs-like-where /programming/803783/sql-server-index-any-improvement-for -seperti-pertanyaan http://www.sqlservercentral.com/Forums/Topic186262-8-1.aspx#bm186568
Dalam kasus saya, saya dapat menulis ulang kueri sebagai:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [company].dbo.[customer]
WHERE [company].dbo.[customer].[Phone no] LIKE '%123456789%'
Kueri ini memberikan output yang sama dengan yang sebelumnya. Saya telah membuat indeks untuk kolom yang tidak tercakup Phone no
. Ketika saya menjalankan kueri ini, ia berjalan hanya dalam 1 detik . Ini adalah perubahan besar dibandingkan dengan 14 detik sebelumnya.
Bagaimana LIKE '%123456789%'
manfaat dari pengindeksan?
Mengapa artikel yang tercantum menyatakan bahwa itu tidak akan meningkatkan kinerja?
Saya mencoba menulis ulang kueri untuk digunakan CHARINDEX
, tetapi kinerjanya masih lambat. Mengapa CHARINDEX
tidak mendapat manfaat dari pengindeksan seperti yang tampak pada LIKE
kueri?
Permintaan menggunakan CHARINDEX
:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [Company].dbo.[customer]
WHERE ( Charindex('9000413237',[Company].dbo.[customer].[Phone no])>0 )
Rencana eksekusi:
Permintaan menggunakan LIKE
:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [Company].dbo.[customer]
WHERE[Company].dbo.[customer].[Phone no] LIKE '%9000413237%'
Rencana eksekusi: