获取有关postgresql中外部排序的详细信息
阅读本文,我发现了以下示例:获取有关postgresql中外部排序的详细信息,sql,postgresql,sql-order-by,Sql,Postgresql,Sql Order By,阅读本文,我发现了以下示例: EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM foo ORDER BY c1; 查询的计划如下所示: Sort (cost=172682.84..175182.84 rows=1000000 width=37) (actual time=584.215..681.531 rows=1000000 loops=1) Sort Key: c1 Sort Method: external sort Disk: 45928k
EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM foo ORDER BY c1;
查询的计划如下所示:
Sort (cost=172682.84..175182.84 rows=1000000 width=37) (actual time=584.215..681.531 rows=1000000 loops=1)
Sort Key: c1
Sort Method: external sort Disk: 45928kB
Buffers: shared hit=3197 read=5137, temp read=5741 written=5741
-> Seq Scan on foo (cost=0.00..18334.00 rows=1000000 width=37) (actual time=0.036..91.914 rows=1000000 loops=1)
Buffers: shared hit=3197 read=5137
Total runtime: 711.195 ms
,外部排序是一系列算法。这是否意味着
PostgreSQL
进行外部合并排序
?如果是,我如何获得一些详细信息,例如批次数量及其大小。甚至可能吗?通过设置参数trace\u sorts=on
()
除此之外,您可能还想了解,至少是以下评论:
此模块处理堆元组、索引元组或单个元组的排序
基准(并且可以轻松支持其他类型的可排序对象,
如有必要)。它对少量和大量都有效
大量的数据。使用qsort()在内存中对少量数据进行排序。大的
使用临时文件和标准外部排序对金额进行排序
算法
请参阅Knuth,第3卷,了解有关外部系统的更多信息
排序算法。我们使用替换将输入划分为已排序的运行
选择,以实现为堆的优先级树的形式
(基本上是他的算法5.2.3H),然后使用多阶段合并运行
合并,Knuth算法5.4.2D。算法D使用的逻辑“磁带”
由logtape.c实现,它通过循环使用避免了空间浪费
从“磁带”中读取每个数据块后立即释放磁盘空间
您需要查看源代码。@a_horse_没有名字是唯一的方法吗?PosgtrSQL没有提供关于它使用的算法的详细信息,是吗?它不能得到比实际实现更详细的信息。是的,你完全抓住了我想要的。谢谢你,特别是你指出了来源。