나는 int이고 btree 인덱스를 가진 컬럼 c가있는 테이블 t를가집니다.PostgreSQL :이 간단한 쿼리가 인덱스를 사용하지 않는 이유는 무엇입니까?
다음 쿼리가이 인덱스를 사용하지 않는 이유는 무엇입니까? 인덱스의
HashAggregate (cost=1005817.55..1005817.71 rows=16 width=4)
-> Seq Scan on t (cost=0.00..946059.84 rows=23903084 width=4)
나의 이해는 제한되어 있지만 이러한 쿼리는 인덱스의 목적이라고 생각 :
explain select c from t group by c;
내가 얻을 결과입니다.
인덱스를 사용하지 않을 경우 어떤 상황에서 돈을 지불하지 않습니까? 이 예제에서 크기에 대해 이야기 할 때 적어도 어떤 배포판도 상상할 수 없습니다. – David
@ David : 전체 인덱스 스캔은 테이블의 순차 스캔보다 훨씬 비쌉니다. 인덱스는 일반적으로 테이블의 작은 하위 집합을 선택하는 경우에만 유용합니다. –
이것은 잘못되었습니다. SELECT DISTINCT x FROM t;와 같은 질의는'(x)'에 대한 인덱스를 사용할 수 있어야합니다. 전체 색인을 읽는 것이 전체 표를 읽는 것보다 저렴해야합니다. 그러나 Postgres는 내가 아는 한 [Loose Index scan] (https://wiki.postgresql.org/wiki/Loose_indexscan)을 구현하지 않았습니다. –