คำถามนี้เป็นคำถามที่เกี่ยวข้องกับคำถามเก่าของฉัน ข้อความค้นหาด้านล่างนี้ใช้เวลาดำเนินการ 10 ถึง 15 วินาที:
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)
ในบางบทความฉันเห็นว่าการใช้CAST
และCHARINDEX
จะไม่ได้รับประโยชน์จากการจัดทำดัชนี นอกจากนี้ยังมีบทความบางส่วนที่กล่าวว่าการใช้LIKE '%abc%'
จะไม่ได้รับประโยชน์จากการทำดัชนีในขณะที่LIKE 'abc%'
:
http://bytes.com/topic/sql-server/answers/81467-using-charindex-vs-like-where /programming/803783/sql-server-index-any-improvement- สำหรับ -like-query http://www.sqlservercentral.com/Forums/Topic186262-8-1.aspx#bm186568
ในกรณีของฉันฉันสามารถเขียนแบบสอบถามเป็น:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [company].dbo.[customer]
WHERE [company].dbo.[customer].[Phone no] LIKE '%123456789%'
แบบสอบถามนี้ให้ผลลัพธ์เช่นเดียวกับรายการก่อนหน้า ผมได้สร้างดัชนี nonclustered Phone no
สำหรับคอลัมน์ เมื่อผมดำเนินการค้นหานี้มันจะทำงานในเวลาเพียง1 วินาที นี่เป็นการเปลี่ยนแปลงครั้งใหญ่เมื่อเทียบกับ14 วินาทีก่อนหน้านี้
วิธีการที่ไม่LIKE '%123456789%'
ได้รับประโยชน์จากการจัดทำดัชนี?
เหตุใดบทความที่ระบุจึงไม่สามารถปรับปรุงประสิทธิภาพได้
ฉันพยายามเขียนแบบสอบถามใหม่เพื่อใช้CHARINDEX
แต่ประสิทธิภาพยังคงช้า เหตุใดจึงไม่CHARINDEX
ได้ประโยชน์จากการจัดทำดัชนีตามที่ปรากฏในLIKE
แบบสอบถาม
คำค้นหาโดยใช้CHARINDEX
:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [Company].dbo.[customer]
WHERE ( Charindex('9000413237',[Company].dbo.[customer].[Phone no])>0 )
แผนการดำเนินการ:
คำค้นหาโดยใช้LIKE
:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [Company].dbo.[customer]
WHERE[Company].dbo.[customer].[Phone no] LIKE '%9000413237%'
แผนการดำเนินการ: