Persyaratan: Saat menggunakan GUID sebagai indeks agregasi kunci utama, disarankan untuk menggunakan GUID yang diurutkan, karena GUID yang tidak berurutan akan menyebabkan pemborosan ruang dan penurunan efisiensi baca dan tulis yang dihasilkan.
Resensi:
Nilai GUID database
Jenis data Pengidentifikasi Unik Secara Global (GUID) di SQL Server diwakili oleh tipe dataPengidentifikasi unik,, yang menyimpan nilai biner 16 byte. GUID adalah bilangan biner yang tujuan utamanya adalah sebagai pengidentifikasi yang harus unik dalam jaringan dengan banyak komputer di banyak situs.
Baik Guid dan SqlGuid memiliki cara untuk membandingkan nilai GUID yang berbeda. Implementasi SqlGuid menggunakan perilaku SQL Server,Enam byte terakhir dari nilai adalah yang paling penting。
GUID berurutan secara inheren dapat ditebak, jadi jangan menggunakannya dalam konteks sensitif keamanan。
Referensi:Login hyperlink terlihat.
Basis data diurutkan oleh GUID
SQL Server database memiliki satuIdSequentialBaru ()untuk membuat GUID yang diurutkan. Saat membuat tabel, Anda dapat mengaturnya sebagai nilai default dari bidang jenis GUID, dan secara otomatis membuat nilai kunci primer saat menyisipkan data baru (fungsi ini hanya dapat digunakan sebagai nilai default bidang, tidak langsung dipanggil dalam SQL).
Contoh:
Fungsi NewSequentialId() hanya dapat digunakan dalam database, meskipun dokumentasi MSDN Microsoft menyatakan bahwa NEWSEQUENTIALID adalah pembungkus untuk fungsi Windows UuidCreateSequential.
Tips: Jangan gunakan fungsi jika ini adalah masalah kerahasiaan. KarenaDimungkinkan untuk menebak nilai GUID yang dihasilkan berikutnyauntuk mengakses data yang terkait dengan GUID tersebut.
Referensi:Login hyperlink terlihat.
Login hyperlink terlihat.
.NET membuat GUID yang diurutkan
Fungsi UuidCreateSequential bergantung pada perangkat keras komputasi metode12 bit terakhir sebenarnya adalah alamat MAC dari kartu jaringan。
Kodenya adalah sebagai berikut:
Hasilnya adalah sebagai berikut:
Kekurangan:
- Metode ini mengharuskan DllImport untuk memanggil perpustakaan Windows, sehingga tidak lintas platform.
- Ini tidak dapat digunakan dalam lingkungan berkluster, di mana beberapa mesin menulis ke database yang sama karena GUID yang dihasilkan akan berbeda satu sama lain (perangkat keras komputasi yang bergantung pada fungsi), yang mengakibatkan fragmentasi indeks.
- Jika server Windows Anda dimulai ulang, GUID mungkin dimulai pada kisaran yang lebih rendah, yang mengakibatkan fragmentasi indeks.
Referensi:
Login hyperlink terlihat.
Login hyperlink terlihat.
Jika Anda menggunakan program .NET untuk membuat GUID yang dipesan SQL SERVER, disarankan untuk menggunakan pustaka kelas pihak ketiga:RT. Sisir, perintah Nuget adalah sebagai berikut:
Kodenya adalah sebagai berikut:
Hasil:
Referensi:Login hyperlink terlihat.
Fragmen indeks kunci utama GUID yang diurutkan dan tidak diurutkan
Mulailah dengan membuat dua tabel dengan skrip berikut:
Tes menyisipkan 100.000 buah data, dan kodenya adalah sebagai berikut:
Hasil tes adalah sebagai berikut:
| GUID | Waktu yang Dikonsumsi (ms) | Kepadatan Pemindaian [Hitungan Terbaik: Hitungan Aktual], semakin tinggi nilainya, semakin baik | Fragmentasi Pemindaian Logis, semakin rendah nilainya, semakin baik | Kepadatan halaman rata-rata (penuh) (Rata-rata. Kepadatan halaman (penuh), semakin tinggi nilainya, semakin baik | | GUID Tidak Berurutan | 13367 | 12.58% [61:485] | 98.97% | 63.66% | | Pesan GUID | 14139 | 100.00% [39:39] | 0.32% | 99.61% |
Pengujian ini menyisipkan 1 juta potongan data lagi, dengan GUID yang tidak berurutan membutuhkan waktu 135203 ms dan GUID terordinasi membutuhkan 135134 ms. Hunian ruang penyimpanan adalah sebagai berikut:
GUID yang tidak diurutkan: 36.547 MB GUID yang dipesan: 26.609 MB
Referensi:Login hyperlink terlihat.
(Akhir)
|