GUID 128-bit (uniqueidentifier
) tentu saja 4x lebih besar dari int
32-bit kunci. Namun, ada beberapa keuntungan utama:
- Tidak ada masalah "IDENTITY INSERT" saat menggabungkan konten
- Jika Anda menggunakan nilai COMB alih-alih NEWSEQUENTIALID(), Anda mendapatkan stempel waktu INSERT "gratis". Anda bahkan dapat
SELECT
dari kunci utama berdasarkan rentang tanggal/waktu jika Anda mau dengan beberapaCAST()
fancy yang mewah panggilan. - Mereka unik secara global, yang terkadang sangat berguna.
- Karena tidak perlu melacak tanda air tinggi, lapisan BL Anda dapat menetapkan nilai daripada SQL Server, sehingga menghilangkan langkah
SELECT scope_identity()
untuk mendapatkan kunci utama setelah penyisipan. - Jika bahkan dari jarak jauh mungkin Anda dapat memiliki lebih dari 2 miliar catatan, Anda harus menggunakan
bigint
(64 bit) sebagai gantiint
. Setelah Anda melakukannya,uniqueidentifier
hanya dua kali lebih besar daribigint
. - Menggunakan GUID membuatnya lebih aman untuk mengekspos kunci di URL, dll. tanpa membuat diri Anda terkena serangan "tebak-ID".
- Antara bagaimana SQL Server memuat halaman dari disk dan bagaimana prosesor sekarang sebagian besar 64-bit, hanya karena angka adalah 128 bit, bukan 32, tidak berarti perlu 4x lebih lama untuk membandingkan. Pengujian terakhir yang saya lihat menunjukkan bahwa GUID hampir sama cepatnya.
- Ukuran indeks bergantung pada berapa banyak kolom disertakan. Meskipun GUID itu sendiri lebih besar, 8 atau 12 byte tambahan mungkin tidak signifikan dibandingkan dengan kolom lain dalam indeks.
Pada akhirnya, memeras beberapa keuntungan kinerja kecil dengan menggunakan bilangan bulat mungkin tidak sebanding dengan kehilangan keuntungan dari GUID. Uji secara empiris dan putuskan sendiri.
Secara pribadi, saya masih menggunakan keduanya, tergantung pada situasinya, tetapi faktor penentu tidak pernah benar-benar turun ke performa dalam kasus saya.