Ich versuche, mehr über den in SQL Server 2016 eingeführten Abfrageplanoperator "Fremdschlüsselreferenzprüfung" zu erfahren. Es gibt nicht viele Informationen dazu. Microsoft hat es hier angekündigt und ich habe hier darüber gebloggt . Der neue Operator wird angezeigt , indem eine Zeile aus einer übergeordneten Tabelle mit mindestens 254 eingehenden Fremdschlüsselreferenzen gelöscht wird : dbfiddle link .
In den Operator-Details werden drei verschiedene Zählungen angezeigt:
- Foreign Key References Count ist die Anzahl der eingehenden Fremdschlüssel.
- No matching Indexes Count ist die Anzahl der eingehenden Fremdschlüssel ohne geeigneten Index. Um sicherzustellen, dass die aktualisierte oder gelöschte Tabelle diese Einschränkung nicht verletzt, muss eine untergeordnete Tabelle überprüft werden.
- Ich weiß nicht, was Partial Matching Indexes Count darstellt.
Was ist in diesem Zusammenhang ein partieller Matching-Index? Folgendes konnte ich nicht zum Laufen bringen:
- Gefilterte Indizes
- Setzen der Fremdschlüsselspalte als
INCLUDE
Spalte für einen Index - Indizes mit der Fremdschlüsselspalte als zweiter Schlüsselspalte
- Einspaltige Indizes für Fremdschlüssel mit mehreren Spalten
- Erstellen mehrerer abdeckender Indizes, um einen "Index-Join" -Plan für einen Fremdschlüssel mit mehreren Spalten zu aktivieren
Dan Guzman wies darauf hin, dass Fremdschlüssel mit mehreren Spalten mit Indizes übereinstimmen können, selbst wenn sich die Indexschlüssel in einer anderen Reihenfolge als die Fremdschlüsselspalten befinden. Sein Code ist hier, falls jemand in der Lage ist, ihn als Ausgangspunkt zu verwenden, um mehr über teilweise übereinstimmende Indizes herauszufinden.
quelle
Nach einigem Nachforschen gelang es mir, einen Beitrag zu verfassen, in dem "Partial Matching Indexes" und Foreign Keys erwähnt werden
Der Blog-Post vom 1. März 2013 im Code-Blog von Carlos Klapp mit dem Titel "
Foreign Keys without Indexes
Stored Procedure" (Gespeicherte Prozedur)Util_FKsWithoutIndexes
sucht nach Fremdschlüsseln, für die keine geeigneten Indizes für FK-Beziehungen vorhanden sind. (Dieser Blogger hat dies anscheinend von SQL Server Central übernommenThe Ultimate Index-Less Foreign-Key Finder
(15. Oktober 2009). ) Im Blog heißt es:Wenn ich das richtig verstehe und eine FK-Beziehung nicht über einen Index verfügt, der mit jeder Spalte in einem erforderlichen Index übereinstimmt, gibt es möglicherweise einige Indizes, die einige der Spalten enthalten. Wenn zum Beispiel eine FK Beziehung hat drei Spalten (
a
,b
,c
) , aber es gibt keinen Index mit den gleichen drei Spalten, kann es einen Index gibt , die (hata
,b
) oder (a
,c
) oder (b
,c
) und bei Fragen helfen können , aber wird erfordern einige Index-Scans zu Zeilen mit der fehlenden Spalte.Wenn es überhaupt keine Indizes gibt, die eine FK-Einschränkung unterstützen können, ist die "Partial Matching Indexes Count" Null (
0
) oder erhöht diese Anzahl zumindest nicht.quelle
(FKey2,FKey3)
erstellen und einen Index für zu erstellenFKey2
. Bitte versuchen Sie das.create unique index FULL_IX_UNIQUE ON FK_PARENT_TABLE (FKey, Fkey2, Fkey3)
, den Index beibehaltenFKey2
und es erneut versuchen.