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

O que indexar em consultas com muitas colunas na cláusula WHERE


Você precisa descobrir o que WHERE cláusulas que você usará com esta consulta, com que frequência cada uma ocorrerá e quão seletiva será cada condição.

  • Não indexe consultas que ocorrem raramente, a menos que seja necessário.

  • Use índices de várias colunas, começando com as colunas que ocorrerão em um = comparação.

  • Com relação à ordem das colunas em um índice multicoluna, comece com as colunas que serão usadas em uma consulta por si só (um índice pode ser usado para uma consulta com apenas algumas de suas colunas, desde que estejam no início do índice).

  • Você pode omitir colunas com baixa seletividade, como gender .

Por exemplo, com suas consultas acima, se todas forem frequentes e todas as colunas forem seletivas, esses índices seriam bons:
... ON apartments (city_id, rooms, size)

... ON apartments (area_id, ad_type, price)

... ON apartments (area_id, ad_type, published_at)

Esses índices também podem ser usados ​​para WHERE cláusulas com apenas area_id ou city_id neles.

É ruim ter muitos índices.

Se o método acima levar a muitos índices, por exemplo, porque o usuário pode escolher colunas arbitrárias para WHERE cláusula, é melhor indexar colunas individuais ou ocasionalmente pares de colunas que vão regularmente juntas.

Dessa forma, o PostgreSQL pode escolher uma varredura de índice de bitmap para combinar vários índices para uma consulta. Isso é menos eficiente do que uma varredura de índice normal , mas geralmente melhor do que uma varredura sequencial .