PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Vários índices vs índice único em várias colunas no postgresql


Independentemente de quantos índices você criou na relação, apenas um deles será usado em uma determinada consulta (qual depende da consulta, estatísticas etc). Portanto, no seu caso, você não obteria uma vantagem cumulativa ao criar dois índices de coluna única. Para obter o máximo de desempenho do índice, sugiro usar o índice composto em (local, carimbo de data/hora).

Observe que consultas como ... WHERE timestamp BETWEEN smth AND smth não usará o índice acima enquanto consultas como ... WHERE location = 'smth' ou ... WHERE location = 'smth' AND timestamp BETWEEN smth AND smth vai. É porque o primeiro atributo no índice é crucial para pesquisar e classificar.

Não se esqueça de realizar
ANALYZE;

após a criação do índice para coletar estatísticas.

Atualização: Como @MondKin mencionado nos comentários, certas consultas podem realmente usar vários índices na mesma relação. Por exemplo, consulte com OR cláusulas como a = 123 OR b = 456 (assumindo que existem índices para ambas as colunas). Nesse caso, o postgres executaria varreduras de índice de bitmap para ambos os índices, construiria uma união de bitmaps resultantes e a usaria para varredura de heap de bitmap. Em certas condições, o mesmo esquema pode ser usado para AND consultas, mas em vez de união haveria uma interseção.