Apakah ada perbedaan nyata antara indeks cluster unik dan kunci primer cluster?

17

Saya mengerti bahwa mungkin ada perbedaan makna atau maksud di antara keduanya, tetapi apakah ada perbedaan perilaku atau kinerja antara kunci primer yang dikelompokkan dan indeks unik yang dikelompokkan?

goric
sumber

Jawaban:

15

Satu perbedaan utama adalah bahwa indeks unik dapat memiliki nilai NULL yang tidak diizinkan di kunci utama. Berkelompok atau tidak, ini adalah perbedaan utama antara implementasi praktis dari Kunci Utama versus Kunci Unik.

Oh, dan fakta bahwa sebuah meja dapat memiliki satu PK dan banyak UK :-).

Keduanya adalah perbedaan dalam INTENT, bukan dalam KINERJA. Kalau tidak, saya tidak berpikir ada perbedaan. Di belakang PK atau UK mana pun, SQL Server membuat indeks (tergantung pada permintaan, berkerumun atau tidak) dan cara yang digunakan transparan untuk sumbernya.

Marian
sumber
Jadi tidak ada alasan untuk menggunakan PK, kecuali (A) sebagai alias untuk NOT NULL UNIQUE CLUSTEREDatau (B) untuk menyoroti bahwa UQ tertentu adalah "istimewa" dalam arti metadata, meskipun RDMS bersifat agnostik?
Jon of All Trades
Ya, sesuatu seperti itu, saya akan pergi untuk opsi B sendiri :-).
Marian
Ada alasannya - untuk menghentikan Anda menggunakan nilai khusus NULL di tempat yang tidak pantas!
JamesRyan
@ JamesRyan: Itu diliput oleh Jon dari alasan All Trades #A.
Andriy M
1
@ JamesRyan: Ya, antara PRIMARY KEYdan NOT NULL UNIQUE, yang pertama akan lebih sulit untuk berubah menjadi NULL UNIQUE(terutama jika kendala sudah dirujuk oleh kunci asing). Pasti akan mencegah perubahan yang tidak disengaja dari NOT NULLke NULL.
Andriy M
8

Antara kunci primer berkerumun dan indeks berkerumun unik tidak ada yang berbeda selain indeks berkerumun unik dapat memiliki nilai NULL.

Indeks berkerumun non-unik memiliki pemisah yang harus ditangani untuk nilai-nilai non-unik.

mrdenny
sumber
Apakah maksud Anda bahwa indeks lebih lanjut pada tabel itu menunjuk langsung ke baris dalam indeks berkerumun mengabaikan indeks yang dibuat oleh kunci primer?
bernd_k
1
Itu betul. Indeks Non-Clustered akan mengarah ke kunci clustering, bukan kunci utama. Jika kunci primer adalah kunci non-clustered maka semua yang dilakukannya adalah menegakkan keunikan pada kolom yang tidak mendukung nilai NULL sehingga dapat digunakan melalui kunci asing.
mrdenny