Tengo una tabla t con una columna c, que es una int y tiene un índice btree en ella.PostgreSQL: ¿Por qué esta simple consulta no utiliza el índice?
¿Por qué la siguiente consulta no utiliza este índice?
explain select c from t group by c;
El resultado que obtengo es:
HashAggregate (cost=1005817.55..1005817.71 rows=16 width=4)
-> Seq Scan on t (cost=0.00..946059.84 rows=23903084 width=4)
Mi comprensión de los índices es limitada, pero pensé que este tipo de consultas fueron el objetivo de los índices.
¿Bajo qué circunstancias no sería rentable no usar un índice? No puedo imaginar ninguna distribución al menos cuando estamos hablando del tamaño en este ejemplo. – David
@David: una exploración de índice completo es mucho más costosa que una exploración secuencial de la tabla. Un índice generalmente solo sería útil si selecciona un pequeño subconjunto de la tabla. –
Esto es simplemente incorrecto. Una consulta como 'SELECT DISTINCT x FROM t;' debería poder usar un índice en '(x)'. Leer el índice completo debería ser menos costoso que leer toda la tabla. Pero Postgres no ha implementado por lo que sé [exploraciones de índice suelto] (https://wiki.postgresql.org/wiki/Loose_indexscan) –