Всегда ли MySQL InnoDB требует индекс для каждого ограничения внешнего ключа? - PullRequest
3 голосов
/ 12 ноября 2009

Я использую phpMyAdmin. Чтобы установить ограничение внешнего ключа с помощью InnoDB (под ссылкой «Представление отношения» на вкладке «Структура»), необходимо добавить индекс для поля, к которому я хочу добавить ограничение. Это, очевидно, влияет на производительность вставок / обновлений в таблице, особенно если я хочу добавить несколько ограничений. Можно ли указать ограничение внешнего ключа или реляционную целостность в InnoDB без необходимости создания индекса для обязательного поля?

Большое спасибо JS, Лондон

Ответы [ 2 ]

7 голосов
/ 12 ноября 2009

Из справочного руководства MySQL :

InnoDB требует индексов на иностранных ключи и ссылочные ключи так, чтобы проверка внешнего ключа может быть быстрой и не требуется сканирование таблицы. в ссылочная таблица, должна быть индекс, где столбцы внешнего ключа перечислены как первые столбцы в тот же порядок. Такой индекс создан на ссылочной таблице автоматически если его не существует (Это в в отличие от некоторых старых версий, в какие индексы нужно было создать явно или создание иностранного ключевые ограничения потерпят неудачу.)

1 голос
/ 12 ноября 2009

противоречие внешнего ключа относится 1 ключ к другому. Внешний ключ также является индексом.
Так что да, вам нужно индексировать столбцы (либо с уникальным, либо с внешним ключом), чтобы использовать их в ограничении внешнего ключа.

Доступно 3 типа индексов:
- первичный ключ
- уникальный индекс
- неуникальный индекс

...