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 CASTdan CHARINDEXtidak 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 CHARINDEXtidak mendapat manfaat dari pengindeksan seperti yang tampak pada LIKEkueri?
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:
