Я пытаюсь узнать больше об операторе плана запроса «проверка ссылок на внешние ключи», представленном в SQL Server 2016. Там не так много информации об этом. Microsoft объявила об этом здесь, и я написал об этом здесь . Новый оператор можно увидеть, удалив строку из родительской таблицы с 254 или более входящими ссылками внешнего ключа: ссылка dbfiddle .
В подробностях оператора отображаются три разных значения:
- Счетчик ссылок на внешние ключи - это количество входящих внешних ключей.
- Нет соответствующих индексов Количество - это количество входящих внешних ключей без подходящего индекса. Проверка того, что обновленная или удаленная таблица не нарушит это ограничение, потребует сканирования дочерней таблицы.
- Я не знаю, что представляет собой Частичное совпадение индексов .
Что такое индекс частичного соответствия в этом контексте? Я не смог заставить работать одно из следующих действий:
- Отфильтрованные индексы
- Помещение столбца внешнего ключа в качестве
INCLUDE
столбца для индекса - Индексы со столбцом внешнего ключа в качестве второго ключевого столбца
- Индексы одного столбца для внешних ключей нескольких столбцов
- Создание нескольких покрывающих индексов для включения плана «соединения индекса» для внешнего ключа из нескольких столбцов
Дэн Гузман отметил, что внешние ключи нескольких столбцов могут соответствовать индексам, даже если ключи индекса находятся в другом порядке, чем столбцы внешнего ключа. Его код здесь на тот случай, если кто-то сможет использовать его в качестве отправной точки, чтобы узнать больше о частичных индексах соответствия.
источник
После еще нескольких поисков мне удалось найти пост, в котором упоминаются «Частично совпадающие индексы» и «Внешние ключи».
В записи блога от 1 марта 2013 года в блоге Карлоса Клэпа под названием
Foreign Keys without Indexes
«Вызывается хранимая процедура»,Util_FKsWithoutIndexes
которая ищет внешние ключи, которые не имеют надлежащих индексов для связей FK. (Похоже, этот блоггер поднял это из SQL Server CentralThe Ultimate Index-Less Foreign-Key Finder
(15 октября 2009 г.) ) В блоге говорится следующее:Если я правильно понимаю, что если отношение FK не имеет индекса, который соответствует каждому столбцу в каком-либо необходимом индексе, могут быть некоторые индексы, которые имеют некоторые из столбцов. Например, если отношения FK имеет три колонки (
a
,b
,c
) , но там нет индекса с теми же тремя колонками, может существовать индекс , который имеет (a
,b
) или (a
,c
) или (b
,c
) и может помочь с запросами , но будет требовать некоторого сканирования индекса для строк с отсутствующим столбцом.Если вообще нет индексов, которые могут поддерживать ограничение FK, то «Счетчик частичных совпадений индексов» будет равен нулю (
0
) или, по крайней мере, не будет увеличивать это число.источник
(FKey2,FKey3)
и создать индекс наFKey2
. Пожалуйста, попробуйте это.create unique index FULL_IX_UNIQUE ON FK_PARENT_TABLE (FKey, Fkey2, Fkey3)
, сохранить индексFKey2
и попробовать еще раз.