我在PostgreSQL中分析了连接运算符的性能,发现了这个:
Merge Full Join (cost=26144.09..27373.25 rows=176921 width=442) (actual time=127.207..218.997 rows=177706 loops=1)
Merge Cond: (pet.player_id = p.id)
-> Sort (cost=26028.80..26471.11 rows=176921 width=57) (actual time=126.850..166.591 rows=176941 loops=1)
Sort Key: pet.player_id
Sort Method: external merge Disk: 13040kB
所以在加入之前我们首先进行排序。最好的排序算法有 O ( n log n )复杂度,所以我预计2个连接和1个联合可以大量工作数据的。事实上,它加入的速度更慢。我进行了几次实验并得到了以下统计数据:
一个连接(两个250k行的表):17233sec
2个连接和1个连接(相同的表):20422sec
实验中使用的连接算法是排序合并连接。 Set enable_mergejoin To true
。
在这种情况下,为什么2个连接和1个连接速度较慢?