Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 3914|Jawab: 3

[Sumber] [MSSQL] SQL SERVER mengurutkan GUID dan GUID yang tidak berurutan sebagai pengujian indeks agregasi kunci utama

[Salin tautan]
Diposting pada 08/06/2023 21.12.26 | | | |
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:

Fragmentasi indeks yang dioptimalkan performa SQL Server
https://www.itsvse.com/thread-9508-1-1.html

[Turn] (MSSQL) database SQL Server int dan guid untuk perbandingan kunci primer
https://www.itsvse.com/thread-10605-1-1.html

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:

GUIDWaktu yang Dikonsumsi (ms)Kepadatan Pemindaian [Hitungan Terbaik: Hitungan Aktual], semakin tinggi nilainya, semakin baikFragmentasi Pemindaian Logis, semakin rendah nilainya, semakin baikKepadatan halaman rata-rata (penuh) (Rata-rata. Kepadatan halaman (penuh), semakin tinggi nilainya, semakin baik
GUID Tidak Berurutan 1336712.58% [61:485]98.97%63.66%
Pesan GUID 14139100.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)




Mantan:Program .NET Core berkas sumber daya baca dan tulis multibahasa (.resx)
Depan:.NET/C# Stream Baca file memori disk
 Tuan tanah| Diposting pada 27/01/2024 11.07.12 |
ABP membuat GUID yang diurutkan untuk database server sql, kode sumbernya adalah sebagai berikut:



 Tuan tanah| Diposting pada 24/03/2024 11.43.45 |
EF Core menghasilkan kode GUID yang diurutkan:





Login hyperlink terlihat.

 Tuan tanah| Diposting pada 11/04/2024 15.00.11 |
MySQL menghasilkan GUID yang diurutkan:Login hyperlink terlihat.



Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com