我有一个带有2个外键的表,我们称它们为fk1和fk2。两者具有相同的类型和相同的指数。但是当我“解释”一个简单的选择查询时,我会得到完全不同的查询计划。对于FK1:PostgreSql:具有相同列的不同查询计划
explain select * from mytable where fk1 = 1;
结果
Index Scan using fk1_idx on mytable (cost=0.00..9.32 rows=2 width=4)
Index Cond: (fk1 = 1)
对于FK2
explain select * from mytable where fk2 = 1;
结果:
Bitmap Heap Scan on mytable (cost=5.88..659.18 rows=208 width=4)
Recheck Cond: (fk2 = 1)
-> Bitmap Index Scan on fk2_idx (cost=0.00..5.83 rows=208 width=0)
Index Cond: (fk2 = 1)
第二个似乎更加低效。这是否是由于它可能会返回更多结果,因此更复杂的查询会得到回报?