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

Postgres a indexy cizích klíčů a primárních klíčů

PostgreSQL automaticky vytváří indexy na primárních klíčích a jedinečných omezeních, ale ne na referenční straně vztahů cizích klíčů.

Když Pg vytvoří implicitní index, vyšle NOTICE -level zprávu, kterou můžete vidět v psql a/nebo systémové protokoly, takže můžete vidět, kdy se to stane. Automaticky vytvořené indexy jsou viditelné v \d výstup také pro tabulku.

Dokumentace k jedinečným indexům říká:

PostgreSQL automaticky vytvoří index pro každé jedinečné omezení a omezení primárního klíče, aby byla vynucena jedinečnost. Není tedy nutné vytvářet index explicitně pro sloupce primárního klíče.

a dokumentace o omezeních říká:

Vzhledem k tomu, že DELETE řádku z odkazované tabulky nebo AKTUALIZACE odkazovaného sloupce bude vyžadovat prohledání odkazující tabulky na řádky odpovídající staré hodnotě, je často dobré odkazující sloupce indexovat. Protože to není vždy potřeba a existuje mnoho možností, jak indexovat, deklarace omezení cizího klíče automaticky nevytvoří index na odkazujících sloupcích.

Proto si musíte vytvořit indexy na cizích klíčích sami, pokud je chcete.

Všimněte si, že pokud použijete primární cizí klíče, jako jsou 2 FK jako PK v tabulce M-to-N, budete mít index na PK a pravděpodobně nebudete muset vytvářet žádné další indexy.

I když je obvykle dobré vytvořit index na (nebo včetně) vašich sloupců cizího klíče na straně odkazu, není to povinné. Každý index, který přidáte, mírně zpomaluje operace DML, takže platíte náklady na výkon za každý INSERT , UPDATE nebo DELETE . Pokud je index používán jen zřídka, nemusí být vhodné jej mít.



  1. CTE Recursion pro získání stromové hierarchie

  2. Oracle:Fulltextové vyhledávání s podmínkou

  3. SQL Server String nebo binární data by byla zkrácena

  4. Funkce oken a další místní agregace