gpt4 book ai didi

sql - SQL ORDER BY的价格如何?

转载 作者:行者123 更新时间:2023-12-03 12:44:57 25 4
gpt4 key购买 nike

我不太了解SQL命令如何对大型结果集进行排序。它是在内存中即时完成的(即执行查询时)吗?

在SQL中使用ORDER BY进行排序是否比用Java这样的语言(包含快速内置排序,可能使用quicksort)对包含结果的对象的链接列表进行排序要更快呢?

最佳答案

几乎肯定可以对数据库中的数据进行排序。数据库旨在处理大量数据。此外,数据库还有各种优化措施,而中间层则无法使用。如果您计划在中间层编写一个超高效的排序例程,该例程利用您所拥有的有关数据库的数据的信息(例如,将数据种植到数十个中间层计算机的群集中,以便排序永远不会溢出到磁盘上,这是因为您的数据通常被命令选择通常效率不高的算法),您可能会击败数据库的排序速度。但这往往很少见。

例如,取决于查询,数据库优化器可以选择一个查询计划,该计划按顺序返回数据而不执行排序。例如,数据库知道索引中的数据已排序,因此它可以选择执行索引扫描以按顺序返回数据,而不必实现和排序整个结果集。如果确实需要实现整个结果,则只需要排序的列和某种行标识符(即Oracle中的ROWID),而不是像天真的中间层实现那样对整行数据进行排序。例如,如果您在(col1,col2)上有一个复合索引,并且决定对UPPER(col2),LOWER(col1)进行排序,则数据库可以从索引中读取col1和col2的值,对行标识符进行排序,并然后从表中获取数据。当然,数据库不必这样做-优化程序将考虑进行排序的成本与从表或从各种索引中获取数据的成本之间的关系。数据库可能会得出结论,最有效的方法是进行表扫描,将整行读入内存,然后对其进行排序。可以得出结论,利用索引会导致更多的I / O来获取数据,但是可以通过减少或消除排序成本来弥补这一不足。

关于sql - SQL ORDER BY的价格如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5097942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com