Почему fk автоматически генерирует индексы в некоторых СУБД? - PullRequest
1 голос
/ 12 июня 2011

Я знаю, что внешние ключи должны быть проиндексированы, но я не могу найти причину, по которой или, по крайней мере, почему некоторые СУБД имеют его автоматически, а другие нет.

Может кто-нибудь помочь мне прояснить это и / или привести несколько примеров СУБД, которые создают / не создают индексы для fks?

Спасибо.

Ответы [ 2 ]

1 голос
/ 12 июня 2011

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

Независимо от того, автоматически ли они индексируются вашей БДдвигатель на самом деле просто решение о реализации.

1 голос
/ 12 июня 2011

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

Таким образом, проверка целостности FK требует большого количества запросов к столбцам, которые ссылаются на него. Добавление индексов к этим столбцам значительно ускоряет проверку целостности. Если бы не было индексов в ссылочных столбцах, то изменение ссылочного столбца (или удаление строки, на которую указывают FK) потребовало бы сканирования таблицы для каждой таблицы, которая ссылается на него. Сканирование таблиц не ваш друг, но ФК, безусловно, являются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...