为什么这个全文查询在更少的行上比在更多行上的相同查询慢?

时间:2012-10-03 20:02:53

标签: sql-server full-text-search contains database-performance

此查询需要21秒:

SELECT Top 50 ROW_NUMBER() OVER (ORDER BY aDate DESC) AS Row, aID, aHeadline, aAuthor, aDate, TopStory, SiteSectionID, PrintSection, aSummary, small_image, aBody FROM articles 
WHERE aLive = -1 AND full_story = -1 AND aDate >= '9/3/2012' AND aDate <= '10/3/2012' AND (Contains((aAuthor,aBody,aHeadline,aSubhead,aSummary), '"kodak"')) 
ORDER BY aDate DESC

此查询需要1秒钟:

SELECT Top 50 ROW_NUMBER() OVER (ORDER BY aDate DESC) AS Row, aID, aHeadline, aAuthor, aDate, TopStory, SiteSectionID, PrintSection, aSummary, small_image, aBody FROM articles 
WHERE aLive = -1 AND full_story = -1 AND aDate >= '9/3/2002' AND aDate <= '10/3/2012' AND (Contains((aAuthor,aBody,aHeadline,aSubhead,aSummary), '"kodak"')) 
ORDER BY aDate DESC

唯一不同的是日期范围。如果没有查询的包含部分,它们将分别返回255和39,106行。

对我来说,对39K行的全文查询比对255行的同步更快是没有意义的。

没有包含的第二个查询需要将近2分钟。这让我更加困惑。

其他说明:

  • aDate是具有非唯一索引的日期时间字段
  • aLive是一个具有非唯一索引
  • 的int字段
  • full_story是一个具有非唯一索引的int字段

0 个答案:

没有答案