外部排序和外部合并的区别

Posted

技术标签:

【中文标题】外部排序和外部合并的区别【英文标题】:Difference between external sort and external merge 【发布时间】:2021-09-03 07:05:30 【问题描述】:

我在 postgresql 中看到有两种单独的算法,称为外部排序和外部合并用于排序。我的印象是两者都是一样的。据我所知,外部排序是排序算法的集合,当整个批次无法在内存(RAM)中排序时处理大量数据的排序,并且有两个阶段,第一阶段是对小块数据进行排序并将其存储在临时文件中,第二阶段是合并所有这些子文件以获得最终的数据集。

我也知道外部归并排序算法是外部排序技术的一个例子。

所以在我的情况下,外部排序和外部合并不是几乎相同吗? 我想知道区别以及何时使用这些算法(在什么类型的数据上)。

PS:在相同类型的数据上,外部合并比外部排序花费的时间更长。ql

【问题讨论】:

您似乎在谈论使用 EXPLAIN ANALYZE 采取的一些查询计划,但我们看不到它们。请发布实际计划。事实上,这太模糊了,无法回答。 【参考方案1】:

我觉得你很困惑。

“归并排序”绝对是一种排序算法。其他排序算法还有快速排序、冒泡排序、堆排序等。

但是,在数据库中(我一般会在 DAG 中说),merge 指的是稍微不同的东西。合并是采用两个排序的数据集并将它们组合起来。它可以通过在并行遍历两个元素时一个一个地比较元素来做到这一点。

这与归并排序算法有关。这种合并是幕后发生的事情。但是在这种情况下,合并运算符是合并已经排序的列表。

我还应该指出merge 是许多数据库中的一个语句,它允许在单个语句中插入和更新。在 Postgres(使用 on conflict)中不是这样,但它是该域中“合并”的另一种用法。

【讨论】:

以上是关于外部排序和外部合并的区别的主要内容,如果未能解决你的问题,请参考以下文章

在线排序算法和外部排序算法有啥区别?

外部排序

十大排序总结(js实现稳定性内外部排序区别时间空间复杂度冒泡快速直接选择堆直接插入希尔桶基数归并计数排序)

一文读懂胜者树与败者树

内部排序

外部排序&多路归并排序