Должен ли каждый внешний ключ SQL Server иметь соответствующий индекс? - PullRequest
63 голосов
/ 06 сентября 2010

Рекомендуется ли создавать индекс для каждого внешнего ключа в базе данных SQL Server?

Ответы [ 4 ]

54 голосов
/ 06 сентября 2010

Да, это хорошая практика, см. Здесь: Когда SQL Server прекратил помещать индексы в столбцы внешнего ключа? Прокрутите вниз до Есть ли какие-либо преимущества в индексировании столбцов внешнего ключа? раздел

41 голосов
/ 06 сентября 2010

Каждый внешний ключ?Нет. Там, где селективность низкая (т.е. много значений дублируются), индекс может быть более дорогостоящим, чем сканирование таблицы.Кроме того, в среде высокой активности (гораздо больше операций вставки / обновления / удаления, чем запросов) стоимость обслуживания индексов может повлиять на общую производительность системы.

18 голосов
/ 06 ноября 2012

Причина индексации столбца внешнего ключа аналогична причине индексации любого другого столбца: создайте индекс, если вы собираетесь фильтровать строки по столбцу.

Например, если у вас есть таблица [User] (ID int, Name varchar (50)) и таблица [UserAction] (UserID int, Action varchar (50)), вы, скорее всего, захотите найти какие действия конкретный пользователь сделал. Например, вы собираетесь выполнить следующий запрос:

select ActionName from [UserAction] where UserID = @UserID

Если вы не намерены фильтровать строки по столбцу, тогда нет необходимости указывать индекс. И даже если вы это сделаете, это того стоит, только если у вас более 20-30 рядов.

5 голосов
/ 25 августа 2013

Из MSDN: Ограничения FOREIGN KEY

Создание индекса по внешнему ключу часто полезно по следующим причинам:

  • Изменения ограничений PRIMARY KEY проверяются с помощью ограничений FOREIGN KEY в связанных таблицах.
  • Столбцы внешнего ключа часто используются в критериях соединения, когда данные из связанных таблиц объединяются в запросах путем сопоставления столбца или столбцов в ограничении FOREIGN KEY одной таблицы с столбцом первичного или уникального ключа или столбцами в другой таблице.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...