Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Pengidentifikasi unik (panduan) sebagai kunci utama dalam desain basis data

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 beberapa CAST() 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 ganti int . Setelah Anda melakukannya, uniqueidentifier hanya dua kali lebih besar dari bigint .
  • 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gunakan DATABASEPROPERTYEX() untuk Mengembalikan Pengaturan Database di SQL Server

  2. Tips Cepat untuk Memperbaiki dan Memulihkan Database SQL Tanpa Cadangan

  3. Database tidak dapat dibuka karena versi 782. Server ini mendukung versi 706 dan sebelumnya. Jalur penurunan versi tidak didukung

  4. @@DATEFIRST – Dapatkan Hari Pertama Minggu ini di SQL Server

  5. penggabungan nvarchar / indeks / nvarchar (maks) perilaku yang tidak dapat dijelaskan