Musíte zjistit, co WHERE
klauzule, které se chystáte použít s tímto dotazem, jak často se budou vyskytovat a jak selektivní budou jednotlivé podmínky.
-
Neindexujte dotazy, které se vyskytují zřídka, pokud nemusíte.
-
Použijte vícesloupcové indexy, počínaje těmi sloupci, které se vyskytují v
=
srovnání. -
Pokud jde o pořadí sloupců ve vícesloupcovém indexu, začněte těmi sloupci, které budou použity v dotazu samotné (index lze použít pro dotaz pouze s některými jeho sloupci, pokud jsou na začátku indexu).
-
Můžete vynechat sloupce s nízkou selektivitou, například
gender
.
Například u vašich výše uvedených dotazů, pokud jsou všechny časté a všechny sloupce jsou selektivní, by byly dobré tyto indexy:
... ON apartments (city_id, rooms, size)
... ON apartments (area_id, ad_type, price)
... ON apartments (area_id, ad_type, published_at)
Tyto indexy lze také použít pro WHERE
klauzule pouze s area_id
nebo city_id
v nich.
Je špatné mít příliš mnoho indexů.
Pokud by výše uvedená metoda vedla k příliš velkému počtu indexů, např. protože uživatel si může vybrat libovolné sloupce pro WHERE
klauzule, je lepší indexovat jednotlivé sloupce nebo příležitostně páry sloupců, které se pravidelně spojují.
Tímto způsobem může PostgreSQL vybrat skenování indexu bitmap kombinovat několik indexů pro jeden dotaz. To je méně efektivní než běžné indexové skenování , ale obvykle lepší než sekvenční skenování .