Внешние ключи должны быть индексом в mySQL?
Я только что создал свою первую таблицу mySQL самостоятельно (кроме использования Joomla, Wordpress и т.д.), и я являюсь разработчиком MS SQL в течение многих лет, но обычно я могу легко создать внешний ключ в MS SQL, но я столкнулся трудности или недостаток знаний здесь.
Вот мои таблицы:
пользователей
- user_id int primary auto_increment
- имя пользователя varchar (20)
- пароль varchar (20)
сообщения
- post_id в primary auto_increment
- title varchar (100)
- текст сообщения
- user_id int
Когда я пытаюсь добавить внешний ключ к пользователям, который ссылается на posts->user_id
, я не могу увидеть параметр posts->user_id
в окне списка параметров Relation_view на панели mySQL.
Мне интересно, следует ли определять posts->user_id
как Index
или что-то еще? Если да, то почему?
Ответы
Ответ 1
Короткий ответ: Да, MySQL заставляет вас индексировать внешний ключ.
InnoDB требует индексов для внешних ключей и ссылочных ключей, чтобы проверки внешнего ключа могли быть быстрыми и не требовать сканирования таблицы.
Подробнее о внешних ключах на страницах документации MySQL вы можете узнать: http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
Ответ 2
Из справочного руководства :
InnoDB требует индексов для иностранных ключей и ссылочных ключей, чтобы проверки внешнего ключа могут быть быстрыми, а не требуется сканирование таблицы. в таблицы ссылок, должно быть индекс, где столбцы внешнего ключа перечислены в качестве первых столбцов в такой же заказ. Такой индекс создается в таблице ссылок автоматически если он не существует. (Это в в отличие от некоторых более старых версий, в какие индексы должны были быть созданы явно или создание иностранных ключевые ограничения не удались.) index_name, если задано, используется как описанных ранее.
В отличие от SQL Server, который не требует индексирования FK... однако рекомендации, которые я видел, показывают, что вы почти всегда индексируете свои FK, даже если это не требуется.
Ответ 3
Из документация:
InnoDB требует индексов для иностранных ключей и ссылочных ключей, чтобы проверки внешнего ключа могут быть быстрыми, а не требуется сканирование таблицы. в таблицы ссылок, должно быть индекс, где столбцы внешнего ключа перечислены в качестве первых столбцов в тот же порядок.