Saya punya tabel dengan kunci utama komposit (terdiri dari 4 kolom) yang digunakan untuk memastikan tidak ada duplikat dimasukkan ke dalam tabel. Saya sekarang membutuhkan tabel baru yang perlu merujuk kunci dalam tabel ini sebagai kunci asing.
Pertanyaan saya adalah pendekatan mana yang lebih efisien untuk kecepatan pencarian:
1) Apakah saya membuat tabel baru termasuk semua 4 kolom dan referensi semuanya dalam kunci asing.
atau
2) Apakah saya membuat kolom identitas baru di tabel Kunci Utama dan menggunakan ini sebagai kunci asing di tabel baru.
Basis data ini diharapkan menyimpan jumlah data yang sangat besar, jadi saya telah membangunnya sampai sekarang dengan tujuan untuk meminimalkan jumlah data yang disimpan di setiap tabel. Dengan mengingat hal ini, opsi 2 akan menjadi pendekatan terbaik karena saya akan menyimpan 2 kolom int dan kolom datetime untuk setiap baris, tetapi saya ingin menghindari peningkatan waktu pencarian jika tidak perlu.
INT IDENTITY
) dalam kasus seperti itu - membuat referensi dan bergabung dengan tabel itu jadi sangat mudah. Untuk menghindari duplikat, berikan batasan UNIK pada empat kolom. Juga: kunci primer sempit jauh lebih baik karena alasan kinerja (jika digunakan sebagai kunci pengelompokan)Jawaban:
Biaya menggunakan integer sintetik sederhana PK kecil, dan manfaatnya dalam kasus Anda mungkin cukup besar.
Satu-satunya downside materi yang terlintas dalam pikiran adalah bahwa Anda mungkin kehilangan kinerja pada kueri yang diuntungkan dari pengelompokan pada PK komposit. Jika Anda berpikir itu mungkin penting, daripada terus mengelompokkan pada kunci kandidat komposit, tetapi letakkan PK pada kunci sintetis.
sumber
Seperti yang sering terjadi di dunia SQL, jawabannya adalah: "Tergantung."
Lihat pertanyaan ini untuk beberapa petunjuk: Apakah kunci alami memberikan kinerja yang lebih tinggi atau lebih rendah dalam SQL Server daripada kunci integer pengganti?
Ada kasus yang melihat peningkatan kinerja saat menggunakan kunci alami sebagai Kunci Asing. Namun, dalam kebanyakan kasus Anda akan lebih baik dengan kunci yang lebih kecil (baca: kunci pengganti).
Jika Anda memperkenalkan kolom IDENTITAS itu, saya bahkan akan menjadikannya Kunci Utama dan mengubah kolom "alami" menjadi CONSTRAINT UNIK.
sumber