Внешние ключи должны быть индексом в 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 требует индексов для иностранных ключей и ссылочных ключей, чтобы проверки внешнего ключа могут быть быстрыми, а не требуется сканирование таблицы. в таблицы ссылок, должно быть индекс, где столбцы внешнего ключа перечислены в качестве первых столбцов в тот же порядок.