搜索结果计数的sql真的很慢(用于分页)

时间:2013-11-20 05:35:26

标签: sql sql-server performance sql-server-2008

我有一张包含很多新闻的表格。我正在使用SQL Server 2008 Standard ed

在此表中,我有

  • 2百万
  • 聚集索引位于datetime列,表示记录插入时间。
  • headline列上的非聚集索引,newsIdentity列(可能重复),author

当我在此表 中通过我的网络应用 搜索新闻时,服务器需要超过20秒才能响应。

我发现用于计算行数的SQL实际上很慢(对于搜索结果分页)。

这是 showplan_text 结果:

StmtText

select count(*) 
from [news] WITH (NOLOCK)       
WHERE headline like N'%Nginx%' 

StmtText

|--Compute Scalar(DEFINE:([Expr1004]=CONVERT_IMPLICIT(int,[Expr1007],0))) 
   |--Stream Aggregate(DEFINE:([Expr1007]=Count(*))) 
        |--Index Scan(OBJECT:([newsMangr].[dbo].[news].[IX_SearchNews]),  WHERE:  ([newsMangr].[dbo].[news].[headline] like N'%Nginx%')) 

20秒是不可接受的,有什么建议吗?

1 个答案:

答案 0 :(得分:1)

试试这个:

WHERE SUBSTRING(headline, <offset>, 5) = 'Nginx'

<offset>为常数值。