这个问题与我的旧问题有关。执行以下查询需要 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)
Run Code Online (Sandbox Code Playgroud)
在一些文章中,我看到使用CAST
并且CHARINDEX
不会从索引中受益。还有一些文章说 usingLIKE '%abc%'
不会从索引中受益,而LIKE 'abc%'
会:
http://bytes.com/topic/sql-server/answers/81467-using-charindex-vs-like-where /sf/ask/56264841/ -like-queries 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%'
Run Code Online (Sandbox Code Playgroud)
此查询提供与前一个相同的输出。我为 column 创建了一个非聚集索引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 …
Run Code Online (Sandbox Code Playgroud)