Разница для SELECT запрашивает скорость между этими индексами: * UNIQUE (col1, col2) * vs * FK (col1), FK (col2) * - PullRequest
0 голосов
/ 11 октября 2019

УНИКАЛЬНО (col1, col2) против FK (col1), FK (col2)

В настоящее время у меня включены оба индекса, и я не оченьзаботиться о внешних отношениях per se. Поэтому мне интересно, получая все эти ключи, я получаю избыточные индексы для производительности чтения, или они отличаются в некоторых крайних случаях?

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

1 Ответ

1 голос
/ 11 октября 2019

MySQL хочет создать отдельный индекс для каждого из них. Таким образом, вы можете иметь три индекса:

  • (col1, col2)
  • (col1)
  • (col2)

Я говорю "может ", потому что MySQL также пытается оптимизировать автоматическое создание индекса. Итак, если первый индекс уже создан, то второй не нужен - они избыточны. Третий, однако, необходим.

Моя рекомендация? Автоматическое создание индекса поддерживает другие цели - применение уникального ограничения для первого индекса или ограничение внешнего ключа для второго и третьего. Вы хотите, чтобы база данных сделала все это. Сохраняйте объявления unique и foreign key!

Итак, единственное, что вы можете сделать, это убедиться, что уникальный индекс известен примерно за до объявления внешних ключей . Этого должно быть достаточно, чтобы объявить это в create table - однако я бы поставил ограничение unique перед ограничениями внешнего ключа, просто чтобы быть уверенным.

...