Câu hỏi này liên quan đến câu hỏi cũ của tôi . Truy vấn dưới đây mất 10 đến 15 giây để thực hiện:
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)
Trong một số bài viết tôi thấy rằng sử dụng CAST
và CHARINDEX
sẽ không được hưởng lợi từ việc lập chỉ mục. Cũng có một số bài viết nói rằng việc sử dụng LIKE '%abc%'
sẽ không được hưởng lợi từ việc lập chỉ mục trong khi LIKE 'abc%'
sẽ:
http://bytes.com/topic/sql-server/answers/81467-USE-charindex-vs-like-where /programming/803783/sql-server-index-any-improference-for -like-truy vấn http://www.sqlservercentral.com/Forums/Topic186262-8-1.aspx#bm186568
Trong trường hợp của tôi, tôi có thể viết lại truy vấn dưới dạng:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [company].dbo.[customer]
WHERE [company].dbo.[customer].[Phone no] LIKE '%123456789%'
Truy vấn này cho cùng một đầu ra như trước đó. Tôi đã tạo một chỉ mục không bao gồm cho cột Phone no
. Khi tôi thực hiện truy vấn này, nó sẽ chạy chỉ trong 1 giây . Đây là một thay đổi rất lớn so với 14 giây trước đây.
Làm thế nào để LIKE '%123456789%'
hưởng lợi từ việc lập chỉ mục?
Tại sao các bài viết được liệt kê nói rằng nó sẽ không cải thiện hiệu suất?
Tôi đã thử viết lại truy vấn để sử dụng CHARINDEX
, nhưng hiệu suất vẫn chậm. Tại sao CHARINDEX
không được hưởng lợi từ việc lập chỉ mục khi nó xuất hiện LIKE
truy vấn?
Truy vấn bằng cách sử dụng CHARINDEX
:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [Company].dbo.[customer]
WHERE ( Charindex('9000413237',[Company].dbo.[customer].[Phone no])>0 )
Kế hoạch thực hiện:
Truy vấn bằng cách sử dụng LIKE
:
SELECT [customer].[Customer name],[customer].[Sl_No],[customer].[Id]
FROM [Company].dbo.[customer]
WHERE[Company].dbo.[customer].[Phone no] LIKE '%9000413237%'
Kế hoạch thực hiện: