sql >> Databáze >  >> RDS >> PostgreSQL

Co indexovat u dotazů se spoustou sloupců v klauzuli WHERE

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í .



  1. Jak obnovit výpis MySQL z hostitele do kontejneru Docker

  2. Aktualizace JLabel přes SetIcon z datového typu bytea v postgresu

  3. přístup nového uživatele mysql odepřen

  4. Jak zrušit identitu sloupce v tabulce SQL Server - SQL Server / Výukový program T-SQL 44