相关疑难解决方法(0)

LIKE 使用索引,CHARINDEX 不使用?

这个问题与我的旧问题有关。执行以下查询需要 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)

performance index sql-server-2008-r2 query-performance

22
推荐指数
2
解决办法
1万
查看次数