Pertanyaan ini muncul setelah membaca komentar dalam pertanyaan ini:
Saat Anda membuat tabel banyak-ke-banyak, jika Anda membuat kunci utama komposit pada dua kolom kunci asing, atau membuat kunci utama "ID" pengganti auto-increment, dan hanya meletakkan indeks pada dua kolom FK Anda (dan mungkin kendala unik)? Apa implikasi pada kinerja untuk memasukkan catatan baru / pengindeksan ulang di setiap kasus?
Pada dasarnya, ini:
PartDevice
----------
PartID (PK/FK)
DeviceID (PK/FK)
vs. ini:
PartDevice
----------
ID (PK/auto-increment)
PartID (FK)
DeviceID (FK)
Pemberi komentar mengatakan:
membuat dua ID PK berarti tabel secara fisik diurutkan pada disk dalam urutan itu. Jadi jika kita memasukkan (Part1 / Device1), (Part1 / Device2), (Part2 / Device3), maka (Part 1 / Device3) database harus memecah tabel dan memasukkan yang terakhir antara entri 2 dan 3. Untuk banyak rekaman, ini menjadi sangat bermasalah karena melibatkan pengacakan ratusan, ribuan, atau jutaan rekaman setiap kali satu ditambahkan. Sebaliknya, PK yang mengalami peningkatan otomatis memungkinkan rekaman baru ditempelkan sampai akhir.
Alasan saya bertanya adalah karena saya selalu cenderung melakukan kunci utama komposit tanpa kolom kenaikan otomatis pengganti, tetapi saya tidak yakin apakah kunci pengganti sebenarnya lebih berkinerja.