Потреба в індексах на зовнішніх ключах


30

Я борюся з індексами, первинними ключами та зовнішніми ключами ... І потрібно мати їх усі.

Якщо у мене дві таблиці, обидві мають ціле число в якості основного ключа.
Перша таблиця посилається через FK на первинний ключ другої таблиці.

  • В обох таблицях я маю індекс первинного ключа в стовпці ідентифікатора
  • Я створив обмеження ФК щодо table1.ref_fieldпосилання на ПК другої таблиці ( table2.id)
  • і я додав індекс на table1.ref_field

Це найкращий спосіб впорядкувати ці індекси, первинний та зовнішній ключі?

Відповіді:


30

Ваш дизайн хороший. Якщо у вас виникають проблеми з продуктивністю (про які ви не можете знати під час проектування), вам слід створити індекс стовпця table1.ref_field у тому ж порядку (ASC), що і стовпець table2.id. Це підвищить ефективність приєднання між тими до таблиць / стовпців. Витрати на підтримку будь-якого індексу є видатними, тому ви хочете зважити ці витрати на користь покращеної продуктивності.

На жаль, PostgreSQL автоматично не створює таких індексів на стовпцях із зовнішніми ключами, які посилаються на інші стовпці, на жаль, тому це потрібно робити самостійно.

Ось запитання щодо StackOverflow на ту саму тему:

Постгреси та індекси на іноземні та первинні ключі

Ось запит, який допоможе визначити, де ви могли б отримати користь від додавання такого індексу:

Postgresql: Індекси на іноземні ключі


Це не завжди прикро - якщо ви не DELETEзгаданої таблиці, то це може заощадити багато вводу-виводу та процесора, уникаючи збереження невикористаного індексу. Я думаю, що його слід створити за замовчуванням, просто є можливість придушити його створення.
Крейг Рінгер

Крейг Рінгер Не тільки DELETE може вплинути на це, якщо ви вибрали з партенту на дочірні таблиці, у вас виникнуть проблеми з продуктивністю. Цю документацію від Oracle поясніть більше: asktom.oracle.com/pls/asktom/…
777Анон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.