2 개의 외래 키가있는 테이블이 있는데, fk1과 fk2를 호출 할 수 있습니다. 둘 다 동일한 유형과 동일한 색인을 가지고 있습니다. 그러나 간단한 선택 쿼리를 "설명"하면 쿼리 계획이 완전히 달라집니다. fk2PostgreSql : 동일한 열을 가진 다른 쿼리 계획
를 들어Index Scan using fk1_idx on mytable (cost=0.00..9.32 rows=2 width=4)
Index Cond: (fk1 = 1)
explain select * from mytable where fk2 = 1;
결과
explain select * from mytable where fk1 = 1;
결과 : FK1를 들어
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)
두 번째는 더 비효율적 인 것 같다. 잠재적으로 더 많은 결과를 반환한다는 사실 때문에 더 복잡한 쿼리가 효과가 있습니까?