我有一个SQL查询,返回结果需要4秒,但是在添加ORDER BY
查询时,大约需要40秒才能返回结果。为什么ORDER BY
在时间上有如此显着的差异?
如果我没有能力改变数据存储在数据库中的方式,除了使用ORDER BY
子句之外,我还有其他选择吗?
答案 0 :(得分:3)
Order by必须分析原始select语句中每行的order by子句中包含的所有字段。
例如,如果您有一个包含100万条记录的表,并且您写了类似的内容:
select top 100 * from tablea
会非常快,因为只要它返回100条记录,它就会停止执行查询并显示结果。
现在,如果你写:
select top 100 * from tablea order by tableaid
必须从表[匹配where子句]中选择所有100万条记录,然后命令所有100万条记录,然后返回前100条记录。
答案 1 :(得分:2)
可能有很多原因:
TOP n
条款吗?如果是这样,原始查询将很快,因为它只需查看n
条记录 - 但ORDER BY
必须查看所有记录才能找到TOP n
,除非有索引那个字段(或字段)。ORDER BY
可能会将整体查询计划更改为效率低下的内容。通常,如果您经常按相同字段排序,请添加与这些订单匹配的索引。