繁体   English   中英

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

[英]How do databases implement SQL 'ORDER BY x'?

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

我也想知道这如何与 LIMIT...OFFSET 一起工作。 如果数据库不能利用现有索引,似乎数据库必须对整个事物进行排序并提取原始结果集的子集。

索引是有序的; 如果有合适的索引,就会被使用。 否则,他们将需要进行排序,如您所想。 查询的执行计划(您可以通过例如EXPLAIN或通过客户端菜单获得;获得它的确切方法因 DBMS 而异)可能包含有关如何对查询进行排序的提示。

看:

  1. MySQL:按优化排序
  2. PostgreSQL:索引和 ORDER BY
  3. SQL 服务器索引
  4. Oracle:了解索引

你可能会觉得这个页面很有趣:

http://dev.mysql.com/doc/refman/5.6/en/order-by-optimization.html

mySQL显示自己的Order By优化在这个链接

Oracle在这里展示了自己的 Order By 算法过程

基本上,如果你有一个索引,它是有序的。 但是当你不排序时,这是O(n log n)

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

这是一个不平凡的性能问题,每个 RDBMS 都会有巧妙的方法来解决和优化它,这样您就可以使用他们的产品,而不是使用劣质的“Brand X”仿冒品。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM