Чи автоматично Django генерує індекси для стовпців зовнішніх ключів?


75

Чи генерує Django автоматично індекси для зовнішніх ключів, чи це просто залежить від базової політики БД?


2
залежать від db_indexпараметра у ForeignKey, який за замовчуванням має значення True.
Славомір Ленарт,

Відповіді:


112

Django автоматично створює індекс для всіх models.ForeignKeyстовпців.

З документації Django :

Індекс бази даних автоматично створюється на ForeignKey. Ви можете вимкнути це, встановивши db_indexна False. Ви можете уникнути накладних витрат на індекс, якщо ви створюєте зовнішній ключ для узгодженості, а не об'єднання, або якщо ви будете створювати альтернативний індекс, такий як частковий або багаторазовий індекс стовпця.


Я не міг знайти жодного посилання на цей факт. Будь-яке посилання на це?
GabiMe

1
Запустіть, ./manage.py sql appnameі ви побачите оператори SQL для створення індексу. Вони з’являються відразу після SQL для створення останньої необхідної таблиці.
Luke Sneeringer,

7
@LukeSneeringer, я не впевнений, що команда, яку ви даєте, використовувалась для показу індексів, але це більше не робить. Натомість біжіть ./manage.py sqlindexes appnameза індексами самі.
Джессі Бедер

4
Також можна відключити створення індексу на ForeignKey: code.djangoproject.com/ticket/13730
Jeff Bauer

1
@JesseBeder: це ./manage.py sqlindexes appnameвже не працює в останніх версіях Django.
SaeX
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.