我正在查看两个简单表的自然连接查询的EXPLAIN
。首先,postgresql规划器正在使用merge-join。然后,我在连接的属性上添加索引,它会导致规划器使用散列连接(并且顺序读取数据!)。
所以我的问题是:为什么索引的存在会导致散列连接?
其他数据&代码:
EXPLAIN VERBOSE SELECT * FROM R NATURAL JOIN S;
结果
Merge Join (cost=317.01..711.38 rows=25538 width=12)...
最后执行:
CREATE INDEX SI on S(B);
EXPLAIN VERBOSE SELECT * FROM R NATURAL JOIN S;
结果
Hash Join (cost=1.09..42.62 rows=45 width=12)...
Seq Scan on "user".s (cost=0.00..1.04 rows=4 width=8)