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

EF 4.0 Guid atau Int sebagai Kunci utama

Saya setuju 100% dengan Anda - menggunakan INT IDENTITY jauh lebih baik!

GUID tampaknya menjadi pilihan alami untuk kunci utama Anda - dan jika Anda benar-benar harus melakukannya, Anda mungkin dapat berdebat untuk menggunakannya untuk KUNCI UTAMA tabel. Yang sangat saya sarankan untuk tidak dilakukan menggunakan kolom GUID sebagai kunci pengelompokan , yang dilakukan SQL Server secara default, kecuali jika Anda secara khusus melarangnya.

Anda benar-benar perlu memisahkan dua masalah:

1) kunci utama adalah konstruksi logis - salah satu kunci kandidat yang secara unik dan andal mengidentifikasi setiap baris dalam tabel Anda. Ini bisa apa saja, sungguh - INT, GUID, string - pilih yang paling masuk akal untuk skenario Anda.

2) kunci pengelompokan (kolom atau kolom yang mendefinisikan "indeks berkerumun" pada tabel) - ini adalah fisik hal terkait penyimpanan, dan di sini, tipe data kecil, stabil, dan terus meningkat adalah pilihan terbaik Anda - INT atau BIGINT sebagai opsi default Anda.

Secara default, kunci utama pada tabel SQL Server juga digunakan sebagai kunci pengelompokan - tetapi itu tidak perlu seperti itu! Saya pribadi telah melihat peningkatan kinerja besar-besaran ketika memecah Kunci Utama/Kluster berbasis GUID sebelumnya menjadi dua kunci terpisah - kunci utama (logis) pada GUID, dan kunci pengelompokan (pemesanan) pada IDENTITAS INT yang terpisah(1, 1) kolom.

Sebagai Kimberly Tripp - Ratu Pengindeksan - dan yang lainnya telah berkali-kali menyatakan - GUID sebagai kunci pengelompokan tidak optimal, karena karena keacakannya, ini akan menyebabkan fragmentasi halaman dan indeks yang besar dan kinerja yang umumnya buruk.

Ya, saya tahu - ada newsequentialid() di SQL Server 2005 dan lebih tinggi - tetapi bahkan itu tidak benar-benar dan sepenuhnya berurutan dan dengan demikian juga mengalami masalah yang sama seperti GUID - hanya sedikit kurang menonjol.

Lalu ada masalah lain yang perlu dipertimbangkan:kunci pengelompokan di atas meja akan ditambahkan ke setiap entri pada setiap indeks non-cluster di meja Anda juga - jadi Anda benar-benar ingin memastikannya sekecil mungkin. Biasanya, INT dengan 2+ miliar baris seharusnya cukup untuk sebagian besar tabel - dan dibandingkan dengan GUID sebagai kunci pengelompokan, Anda dapat menghemat ratusan megabita penyimpanan pada disk dan memori server.

Perhitungan cepat - menggunakan INT vs. GUID sebagai Kunci Utama dan Pengelompokan:

  • Tabel Dasar dengan 1.000'000 baris (3,8 MB vs. 15,26 MB)
  • 6 indeks tanpa cluster (22,89 MB vs. 91,55 MB)

TOTAL:25 MB vs. 106 MB - dan itu hanya di satu meja!

Beberapa bahan untuk dipikirkan - hal-hal luar biasa oleh Kimberly Tripp - baca, baca lagi, cerna! Ini adalah injil pengindeksan SQL Server, sungguh.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hyperlink nilai dalam hasil kueri SQL Server di SSMS

  2. Pertanyaan tentang cara menambahkan tanggal yang hilang di sql

  3. Urutan Sortir SQL dengan nilai Null terakhir

  4. Cara Mentranspos resultet dari SQL

  5. Permintaan sql untuk tabel pohon