SQL Server“TOP 101”比“TOP 100”慢得多

use*_*173 6 performance sql-server

当查询编写如下时,SQL Server 显示性能大幅下降:

select top 101 name
from Dogs
order by name
Run Code Online (Sandbox Code Playgroud)

与选择前 100 名相比。

据我所知,发生这种情况的原因是top 100+查询中的 SQL Server只是简单地对所有数据集进行排序并选择顶部记录(而前 100 个和更少的查询使用更复杂的算法)。

是否有任何解决方法?

Bre*_*zar 11

“据我所知,发生这种情况的原因是,前 100 多个查询中的 SQL Server 只是对所有数据集进行排序并选择前100 条记录(而前 100 条及更少的查询使用更复杂的算法)。”

您的两个查询可能具有不同的执行计划。引擎中有一些硬编码表明前 100 名的表现会有所不同,但您可能会遇到类似溢出到 TempDB 的问题。

要根据您面临的查询确定并获得自定义建议,您可以发布执行计划以供下载。如有必要,您可以使用 SQL Sentry Plan Explorer 将它们匿名化。发布实际计划,而不是估计计划。

  • [这是一篇博文](http://sqlblog.com/blogs/paul_white/archive/2010/08/27/sorting-row-goals-and-the-top-100-problem.aspx) 声称那里真的是“前 N”排序运算符中的硬编码值。“SQL Server *总是* 使用替代算法,其中请求 TOP 100(或更少)行。” (9认同)
  • 那太棒了!我以前从未见过 - 我将围绕它编辑我的帖子,因为这是一个致命的发现。 (2认同)
  • @PaulWhite 我主要是阅读你的图片来阅读你的东西。 (2认同)