ORDER BY 子句会减慢查询速度吗?
Does ORDER BY clause slows down the query?
ORDER BY 子句会降低查询性能吗???如果该列被索引而不是它会影响多少。
如果查询计划中有排序运算符(并且有超过 1 行),是的,它有影响。如果数据已经按照您需要的顺序排列(聚簇索引,或者具有查询所需的所有字段的正确顺序的非聚簇索引),则可能不需要排序,但计划中的其他操作可能仍然存在导致进行排序以确保数据仍然处于正确的顺序。
if影响多少,我们测试一下。把排序拿走,比较性能。
@JamesZ 是正确的。将 order by
子句添加到查询中时需要考虑很多事项。例如,如果你做了一个 select top 10 * from dbo.Table order by field
假设有 10,000,000 行会导致查询溢出到 tempdb,因为它将整个 table 假脱机到 tempdb,然后在按你的非索引字段排序后 return 第 10 行。如果您在没有排序的情况下执行相同的 select,结果几乎会立即 return。
在发布 order by
子句之前了解您的 table 是如何编入索引的非常重要。 CTRL-M
是你在 SSMS.
中的好友
最好测试一下。您可以使用实际的执行计划。
这是一个简单的ORDEY BY但是额外的成本是原来的4倍
ORDER BY 子句会降低查询性能吗???如果该列被索引而不是它会影响多少。
如果查询计划中有排序运算符(并且有超过 1 行),是的,它有影响。如果数据已经按照您需要的顺序排列(聚簇索引,或者具有查询所需的所有字段的正确顺序的非聚簇索引),则可能不需要排序,但计划中的其他操作可能仍然存在导致进行排序以确保数据仍然处于正确的顺序。
if影响多少,我们测试一下。把排序拿走,比较性能。
@JamesZ 是正确的。将 order by
子句添加到查询中时需要考虑很多事项。例如,如果你做了一个 select top 10 * from dbo.Table order by field
假设有 10,000,000 行会导致查询溢出到 tempdb,因为它将整个 table 假脱机到 tempdb,然后在按你的非索引字段排序后 return 第 10 行。如果您在没有排序的情况下执行相同的 select,结果几乎会立即 return。
在发布 order by
子句之前了解您的 table 是如何编入索引的非常重要。 CTRL-M
是你在 SSMS.
最好测试一下。您可以使用实际的执行计划。 这是一个简单的ORDEY BY但是额外的成本是原来的4倍