-1

I have a SQL query which takes 4 seconds to return results, however when adding an ORDER BY the query then takes approximately 40 seconds to return the results. Why does the ORDER BY have such a dramatic difference in the time?

And if I were to have no ability to change the manner in which the data is stored in the database, would I have any other alternatives other than using an ORDER BY clause?

4

2 回答 2

3

Order by 必须分析原始 select 语句中每一行的 order by 子句中包含的所有字段。

例如,如果您有一个包含 100 万条记录的表,并且您编写了如下内容:

select top 100 * from tablea

会非常快,因为一旦它返回 100 条记录,它就会停止查询执行并显示结果。

现在,如果你写:

select top 100 * from tablea order by tableaid

这必须从表中选择所有 100 万条记录 [匹配 where 子句],然后对所有 100 万条记录进行排序,然后只返回其中的前 100 条。

于 2013-08-12T15:03:28.120 回答
2

可能有很多原因:

  1. 您订购的是什么类型的字段?按文本(或大字符)字段排序可能会很慢,因为它必须对值进行排序
  2. 你用的是TOP n从句吗?如果是这样,原始查询将很快,因为它只需要查看n记录 - 但ORDER BY必须查看所有记录才能找到,TOP n除非该字段(或多个字段)上有索引。
  3. 如果排序字段上没有索引,则按它排序会更慢。
  4. ORDER BY可能会将整体查询计划更改为效率低得多的东西。

一般来说,如果您经常按相同的字段排序,请添加与这些顺序匹配的索引。

于 2013-08-12T15:04:06.900 回答