it-swarm-eu.dev

Jak zjistím, jaké indexy vytvořit pro tabulku?

Existuje způsob, jak zjistit nejlepší způsob, jak zjistit, které indexy vytvořit pro tabulku?

34
Nick Ginanto

Krátká pravidla palce. (Některé z nich jsou vytvářeny automaticky, ale v závislosti na vašich dbms je možné je později ručně zrušit. Nepředpokládejte, že budete vždy pracovat na PostgreSQL. )

  • Indexujte každý primární klíč.
  • Indexujte každý cizí klíč.
  • Indexujte každý sloupec použitý v klauzuli JOIN.
  • Indexujte každý sloupec použitý v klauzuli WHERE.
  • Prostudujte si dokumentaci a zjistěte, jaké možnosti esoterického indexování vaše dbms podporují.

Každý primární klíč znamená, že primární sloupce ve více sloupcích by měly mít jeden index pokrývající všechny sloupce. PostgreSQL vytvoří tento index automaticky, pokud deklarujete více sloupcový primární klíč.

Existuje mnoho případů, ve kterých vám jediný index více sloupců poskytuje lepší výkon než několik indexů jednoho sloupce. Sledujte pomalé dotazy a proveďte testování, abyste zjistili, která je která.

Předpokládejme, že jakákoli změna indexování zlepší některé činnosti databáze a ostatní degraduje. Považuji za užitečné mít sadu příkazů SQL, které mohu profilovat před a po provedení změn indexů. Tato sada obsahuje příkazy SELECT, INSERT, UPDATE a DELETE.

Neexistuje žádná náhrada za studium dokumentů pro konkrétní dbms.

  • VYTVOŘIT INDEX
  • Indexy (Všimněte si zejména oddílů o výrazech indexování, o částečných indexech ao zkoumání využití indexu)

Kromě toho, co @ Catcall již poskytl , a přidat malý opravný:

Také jsem se zabýval některými základy v tato úzce související odpověď dne SO nedávno .

Odpovědi zatím naznačují, že je třeba vytvořit indexy primárních klíčů, ale v PostgreSQL tomu tak není (platí částečné výjimky). Cituji příručka zde :

PostgreSQL automaticky vytvoří jedinečný index, když je pro tabulku definováno jedinečné omezení nebo primární klíč. Index pokrývá sloupce, které tvoří primární klíč nebo jedinečné omezení (index více sloupců, je-li to vhodné), a je mechanismem, který vynucuje omezení.

Odvážný důl.

může chcete vytvořit další indexy pro druhý nebo pozdější sloupce indexu s více sloupci, ale první z nich je obecně dobře pokryt v několika sloupcích index - s výjimkou případů, kdy další sloupce index výrazně zvětší. Podrobně jsme o tom diskutovali v rámci této související otázky:

Je složený index také vhodný pro dotazy v prvním poli?

Vícebarevné indexy , částečné indexy a indexy ve výrazech jsou obzvláště výkonnými nástroji v PostgreSQL. Protože PostgreSQL 9.2 existují také skenování pouze indexů , ekvivalent "krycích indexů" v jiných RDBMS. Toto není jiný typ indexu, ale nová schopnost RDBMS s existujícími typy indexů.

Každý index nese specifické náklady , takže neexistuje žádný způsob, jak některé základní znalosti skutečně optimalizovat. Pouhé vytvoření více indexů může způsobit více škody než užitku. Zejména mohou indexy zabránit HOT aktualizace ve zlepšení výkonu.

Obecně platí, že operace zápisu (DELETE, UPDATE) jsou dražší (ale mohou také těžit!), Zatímco operace čtení (SELECT) jsou obecně jen přínosem. Příliš mnoho indexů může vyčerpat mezipaměť, takže i operace čtení mohou trpí.

Nakonec tato stránka Postgres Wiki o údržbě indexů obsahuje nástroje k nalezení duplicitních nebo nepoužitých indexů (mimo jiné).

14

Existují dvě možnosti.

  1. To děláte.
  2. Technologie to dělá.

Odpověď na to, jak to udělat sami, je zde docela vyčerpávajícím způsobem zdokumentována. Pojďme se tedy podívat na něco jiného.

Pghero

Pghero vám může pomoci, pokud chcete nějaké automatizované rady.

To znamená, že má některé nedostatky.

  1. Funguje to pouze na WHERE a ORDER BY, ne JOINS.
  2. Používá pouze statistiky na procentech NULL a zřetelné hodnoty.

Podívejte se na toto video další informace .

1
Evan Carroll