Подтвердить что ты не робот

Должен ли каждый внешний ключ SQL Server иметь соответствующий индекс?

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

4b9b3361

Ответ 2

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

Ответ 3

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

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

select ActionName from [UserAction] where UserID = @UserID

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

Ответ 4

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

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

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