CATATAN: Jawaban ini membahas pengembangan kelas perusahaan dalam skala besar .
Ini adalah masalah RDBMS, bukan hanya SQL Server, dan perilakunya bisa sangat menarik. Pertama, meskipun kunci primer secara otomatis (unik) diindeks, itu TIDAK mutlak. Ada kalanya kunci utama TIDAK diindeks secara unik.
Di sebagian besar RDBMS, indeks unik akan secara otomatis dibuat pada kunci utama jika belum ada . Oleh karena itu, Anda dapat membuat indeks Anda sendiri pada kolom kunci utama sebelum mendeklarasikannya sebagai kunci utama, kemudian indeks tersebut akan digunakan (jika dapat diterima) oleh mesin database saat Anda menerapkan deklarasi kunci utama. Seringkali, Anda dapat membuat kunci utama dan mengizinkan indeks unik defaultnya dibuat, lalu membuat indeks alternatif Anda sendiri di kolom itu, lalu melepaskan indeks default.
Sekarang untuk bagian yang menyenangkan - kapan Anda TIDAK menginginkan indeks kunci utama yang unik? Anda tidak menginginkannya, dan tidak dapat mentolerirnya, ketika tabel Anda memperoleh cukup data (baris) untuk membuat pemeliharaan indeks menjadi terlalu mahal. Ini bervariasi berdasarkan perangkat keras, mesin RDBMS, karakteristik tabel dan database, dan beban sistem. Namun, ini biasanya mulai terwujud setelah tabel mencapai beberapa juta baris.
Masalah penting adalah bahwa setiap penyisipan baris atau pembaruan kolom kunci utama menghasilkan pemindaian indeks untuk memastikan keunikan. Pemindaian indeks unik itu (atau ekuivalennya di RDBMS mana pun) menjadi jauh lebih mahal seiring pertumbuhan tabel, hingga mendominasi kinerja tabel.
Saya telah berkali-kali menangani masalah ini dengan tabel sebesar dua miliar baris, penyimpanan 8 TB, dan empat puluh juta baris sisipan per hari. Saya ditugaskan untuk mendesain ulang sistem yang terlibat, termasuk menjatuhkan indeks kunci primer unik secara praktis sebagai langkah pertama. Memang, menurunkan indeks itu perlu dalam produksi hanya untuk memulihkan dari pemadaman, bahkan sebelum kami mendekati desain ulang. Desain ulang itu termasuk menemukan cara lain untuk memastikan keunikan kunci utama dan menyediakan akses cepat ke data.