数据库如何实现SQL'ORDER BY x'?

时间:2011-08-10 17:04:39

标签: sql relational-database

我想知道这些是如何工作的,特别是对于大型结果集。例如,DB是否可能将原始结果写入磁盘然后进行外部排序?

我也想知道如何使用LIMIT ... OFFSET。如果数据库无法利用现有索引,那么DB似乎必须对整个事物进行排序并采用原始结果集的子集。

4 个答案:

答案 0 :(得分:4)

订购索引;如果有合适的索引,将使用。否则,他们需要按照您的想法进行排序。查询的执行计划(您可以使用EXPLAINclient menus获取;获取它的确切方法因DBMS而异)可能包含有关如何对查询进行排序的提示。 / p>

请参阅:

  1. MySQL: ORDER BY Optimization
  2. PostgreSQL: Indexes and ORDER BY
  3. SQL Server Indexes
  4. Oracle: Understanding Indexes

答案 1 :(得分:2)

答案 2 :(得分:1)

mySQL在this link

上显示自己的订单优化顺序

Oracle显示了自己的Order By算法程序here

基本上,如果您有索引,则会对其进行排序。但是当你不进行排序时O(n log n)

答案 3 :(得分:0)

你几乎拥有它的权利。如果没有准备或预先计划(即索引,或先前准备或缓存的数据),则是,必须读取为了生成正确的顺序必须考虑的所有数据,并且如果数据量为如果不能适应可用/已分配的内存,则需要进行磁盘缓存。

这是一个非常重要的性能问题,每个RDBMS都会有巧妙的方法来解决和优化它,这样你就可以使用他们的产品而不是那种劣质的“品牌X”淘汰赛。