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, comogender
.
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 .