Блокировка строк в MySql InnoDb с применением ограничений внешнего ключа и индексов? - PullRequest
5 голосов
/ 16 декабря 2010

Быстрый вопрос.

В разговоре с моим другом с 25-летним опытом работы с БД он говорил мне, если вы используете ограничения внешнего ключа в БД; например, когда таблица записывается в таблицу для сообщений, она блокирует относительную строку в родительской таблице, например, для пользователей.

Это правда?

Также он сказал, что применение индексов к столбцам внешнего ключа должно преодолеть эту блокировку, это правда?

Я обеспокоен ростом трафика на моем сайте, и я могу представить, что это проблема!

Спасибо!

Ответы [ 2 ]

10 голосов
/ 17 декабря 2010

Я написал сообщение в блоге об этом - http://www.mysqlperformanceblog.com/2010/09/20/instrumentation-and-the-cost-of-foreign-keys/ - демо так же, как описал ваш друг. На родительских строках есть блокировка!

Теперь об объяснении разницы между «индексом» и «ключом»:

  • Ключ подобен высокоуровневому реляционному свойству. Это соответствует этому.
  • Индекс - это деталь реализации.

Из руководства по MySQL «InnoDB требует индексов внешних ключей и ссылочных ключей, чтобы проверка внешних ключей могла быть быстрой и не требовала сканирования таблицы». То есть, если вы не добавите индекс при добавлении внешнего ключа, InnoDB автоматически сделает это.

Никакая индексация не предотвращает родительскую блокировку, описанную в моем сообщении в блоге.

0 голосов
/ 16 декабря 2010
...