PostgreSQL автоматично създава индекси за първични ключове и уникални ограничения, но не и за референтната страна на връзките с външни ключове.
Когато Pg създаде имплицитен индекс, той ще издаде NOTICE
-ниво съобщение, което можете да видите в psql
и/или системните регистрационни файлове, за да можете да видите кога се случва. Автоматично създадените индекси се виждат в \d
изход и за таблица.
Документацията за уникалните индекси казва:
PostgreSQL автоматично създава индекс за всяко уникално ограничение и ограничение за първичен ключ, за да наложи уникалността. По този начин не е необходимо да създавате изрично индекс за колони с първичен ключ.
и документацията за ограниченията казва:
Тъй като ИЗТРИВАНЕ на ред от реферираната таблица или АКТУАЛИЗИРАНЕ на препращаща колона ще изисква сканиране на референтната таблица за редове, съответстващи на старата стойност, често е добра идея да индексирате колоните за препращане. Тъй като това не винаги е необходимо и има много възможности за избор как да се индексира, декларацията на ограничение за външен ключ не създава автоматично индекс в колоните за препращане.
Следователно трябва сами да създавате индекси на външни ключове, ако ги искате.
Имайте предвид, че ако използвате първични чужди ключове, като 2 FK като PK в M-to-N таблица, ще имате индекс на PK и вероятно няма да е необходимо да създавате допълнителни индекси.
Въпреки че обикновено е добра идея да създадете индекс върху (или включително) вашите колони с външни ключове от страна на препращане, това не е задължително. Всеки индекс, който добавяте, забавя леко DML операциите, така че плащате разходи за производителност при всяко INSERT
, UPDATE
или DELETE
. Ако индексът се използва рядко, може да не си струва да имате.