Saya mencoba untuk mempelajari lebih lanjut tentang operator rencana permintaan "pemeriksaan kunci asing" yang diperkenalkan di SQL Server 2016. Tidak ada banyak informasi tentang itu di luar sana. Microsoft mengumumkannya di sini dan saya menulis blog di sini . Operator baru dapat dilihat dengan menghapus baris dari tabel induk dengan 254 atau lebih referensi kunci asing yang masuk: tautan dbfiddle .
Ada tiga hitungan berbeda yang ditampilkan dalam rincian operator:
- Asing Referensi Kunci Hitungan adalah jumlah kunci asing yang masuk.
- Penghitungan Indeks Tidak Cocok adalah jumlah kunci asing yang masuk tanpa indeks yang sesuai. Memverifikasi bahwa tabel yang diperbarui atau dihapus tidak akan melanggar kendala yang akan memerlukan pemindaian tabel anak.
- Saya tidak tahu apa yang diwakili Hitung Indeks Pencocokan Parsial .
Apa yang dimaksud indeks pencocokan parsial dalam konteks ini? Saya tidak bisa mendapatkan yang berikut ini untuk bekerja:
- Indeks yang difilter
- Menempatkan kolom kunci asing sebagai
INCLUDE
kolom untuk indeks - Indeks dengan kolom kunci asing sebagai kolom kunci kedua
- Indeks kolom tunggal untuk beberapa kunci asing kolom
- Membuat beberapa indeks penutup untuk mengaktifkan rencana "indeks bergabung" untuk kunci asing beberapa kolom
Dan Guzman menunjukkan bahwa kunci asing beberapa kolom dapat cocok dengan indeks bahkan jika kunci indeks berada dalam urutan yang berbeda dari kolom kunci asing. Kode nya ada di sini jika seseorang dapat menggunakannya sebagai titik awal untuk mencari tahu lebih lanjut tentang indeks pencocokan sebagian.
sumber
Setelah googling lagi, saya berhasil membuat posting yang menyebutkan "Indeks Pencocokan Sebagian" dan Kunci Asing
The 1 Maret 2013 Blog Post di Blog Kode Carlos Klapp berjudul
Foreign Keys without Indexes
memiliki disimpan prosedur yang disebutUtil_FKsWithoutIndexes
yang terlihat untuk kunci asing yang tidak memiliki indeks yang tepat untuk hubungan FK. (Sepertinya blogger ini mengangkat ini dari SQL Server CentralThe Ultimate Index-Less Foreign-Key Finder
(15 Okt 2009) ) Blog mengatakan sebagai berikut:Jika saya memahami ini dengan benar, jika hubungan FK tidak memiliki indeks yang cocok dengan setiap kolom dalam beberapa indeks yang diperlukan, mungkin ada beberapa indeks yang memiliki beberapa kolom. Misalnya, jika hubungan FK memiliki tiga kolom (
a
,b
,c
) tetapi tidak ada indeks dengan tiga kolom yang sama, mungkin ada indeks yang memiliki (a
,b
) atau (a
,c
) atau (b
,c
) dan dapat membantu dengan pertanyaan tapi akan memerlukan beberapa pemindaian indeks ke baris dengan kolom yang hilang.Jika tidak ada indeks sama sekali yang dapat mendukung kendala FK, maka "Penghitungan Indeks Pencocokan Parsial" akan menjadi nol (
0
), atau setidaknya tidak akan menambah jumlah ini.sumber
(FKey2,FKey3)
dan buat indeksFKey2
. Silakan coba itu.create unique index FULL_IX_UNIQUE ON FK_PARENT_TABLE (FKey, Fkey2, Fkey3)
, terus indeksFKey2
dan coba lagi.