为什么' ORDER BY'慢查询这么多?

时间:2013-08-12 15:01:00

标签: sql

我有一个SQL查询,返回结果需要4秒,但是在添加ORDER BY查询时,大约需要40秒才能返回结果。为什么ORDER BY在时间上有如此显着的差异?

如果我没有能力改变数据存储在数据库中的方式,除了使用ORDER BY子句之外,我还有其他选择吗?

2 个答案:

答案 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)

可能有很多原因:

  1. 您订购的是哪种类型的字段?按文本(或大字符)字段排序可能很慢,因为它必须对值进行排序
  2. 您使用的是TOP n条款吗?如果是这样,原始查询将很快,因为它只需查看n条记录 - 但ORDER BY必须查看所有记录才能找到TOP n,除非有索引那个字段(或字段)。
  3. 如果订购字段中没有索引,则按订单排序会更慢。
  4. ORDER BY可能会将整体查询计划更改为效率低下的内容。
  5. 通常,如果您经常按相同字段排序,请添加与这些订单匹配的索引。