我有一個帶有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)
第二個似乎更加低效。這是否是由於它可能會返回更多結果,因此更復雜的查詢會得到回報?