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

Více indexů vs jeden index na více sloupcích v postgresql

Bez ohledu na to, kolik indexů jste vytvořili na relaci, bude v určitém dotazu použit pouze jeden z nich (který závisí na dotazu, statistice atd.). Takže ve vašem případě byste nezískali kumulativní výhodu z vytvoření dvou samostatných sloupcových indexů. Chcete-li získat maximální výkon z indexu, doporučil bych použít složený index na (umístění, časové razítko).

Všimněte si, že dotazy jako ... WHERE timestamp BETWEEN smth AND smth nebude používat výše uvedený index při dotazech jako ... WHERE location = 'smth' nebo ... WHERE location = 'smth' AND timestamp BETWEEN smth AND smth vůle. Je to proto, že první atribut v indexu je rozhodující pro vyhledávání a řazení.

Nezapomeňte vystupovat

ANALYZE;

po vytvoření indexu za účelem shromažďování statistik.

Aktualizace: Jako @MondKin uvedené v komentářích, určité dotazy mohou ve skutečnosti používat několik indexů ve stejném vztahu. Dotazujte se například pomocí OR klauzule jako a = 123 OR b = 456 (za předpokladu, že pro oba sloupce existují indexy). V tomto případě by postgres provedl skenování bitmapových indexů pro oba indexy, vytvořil sjednocení výsledných bitmap a použil je pro skenování haldy bitmap. Za určitých podmínek může být stejné schéma použito pro AND dotazy, ale místo spojení by došlo k průniku.



  1. jak získat úplnou sadu výsledků z SSMS

  2. Automaticky nastavit automatický přírůstek mysql na minimální hodnotu

  3. Získejte seznam prvních záznamů pro každou skupinu

  4. Porovnání dvou bitových masek v SQL, abyste zjistili, zda se některý z bitů shoduje