ORDER BY 子句是不是会减慢查询速度?
Posted
技术标签:
【中文标题】ORDER BY 子句是不是会减慢查询速度?【英文标题】:Does ORDER BY clause slows down the query?ORDER BY 子句是否会减慢查询速度? 【发布时间】:2015-10-06 15:23:08 【问题描述】:ORDER BY 子句是否会降低查询性能???如果列被索引而不是不被索引,它将有多大影响。
【问题讨论】:
这里没有足够的信息来提供足够的答案。每当您向查询添加排序时,它都会影响性能,因为必须对结果进行排序。然而,影响的大小并不是一个静态的答案。涉及许多因素。 我可以看到这个被关闭过于宽泛,仅仅是因为这个问题的正确答案是“它取决于”,例如,它取决于太多的变量来正确回答它。 【参考方案1】:@JamesZ 是正确的。将order by
子句添加到您的查询时,需要考虑很多事情。例如,如果您使用select top 10 * from dbo.Table order by field
假设 10,000,000 行会导致查询溢出到 tempdb,因为它将整个表假脱机到 tempdb,然后在按非索引字段排序后将返回 10 行。如果您在没有排序的情况下执行相同的选择,结果几乎会立即返回。
在发出order by
子句之前了解表的索引方式非常重要。 CTRL-M
是你在 SSMS 中的朋友。
【讨论】:
感谢您的详细解释。【参考方案2】:如果查询计划中有排序运算符(并且有超过 1 行),是的,它有影响。如果数据已经按照您需要的顺序排列(聚集索引或具有正确顺序查询所需的所有字段的非聚集索引),则可能不需要排序,但计划中的其他操作可能仍然存在导致进行排序以确保数据仍然处于正确的顺序。
如果影响多少,好好测试一下。把排序去掉,比较一下性能。
【讨论】:
【参考方案3】:最好测试一下。您可以使用实际的执行计划。 这是一个简单的 ORDEY BY,但额外费用是原来的 4 倍
【讨论】:
以上是关于ORDER BY 子句是不是会减慢查询速度?的主要内容,如果未能解决你的问题,请参考以下文章