Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kinerja UUID di MySQL?

Di pekerjaan saya, kami menggunakan UUID sebagai PK. Apa yang dapat saya katakan dari pengalaman adalah JANGAN GUNAKAN MEREKA sebagai PK (omong-omong SQL Server).

Ini adalah salah satu hal yang ketika Anda memiliki kurang dari 1000 catatan, tidak apa-apa, tetapi ketika Anda memiliki jutaan, itu adalah hal terburuk yang dapat Anda lakukan. Mengapa? Karena UUID tidak berurutan, jadi setiap kali record baru dimasukkan, MSSQL harus melihat halaman yang benar untuk memasukkan record, lalu memasukkan record. Konsekuensi yang sangat buruk dari hal ini adalah halaman-halaman tersebut berakhir dalam ukuran yang berbeda dan akhirnya terfragmentasi, jadi sekarang kita harus melakukan de-fragmentasi secara berkala.

Ketika Anda menggunakan peningkatan otomatis, MSSQL akan selalu pergi ke halaman terakhir, dan Anda berakhir dengan halaman berukuran sama (dalam teori) sehingga kinerja untuk memilih catatan tersebut jauh lebih baik (juga karena INSERT tidak akan memblokir tabel/halaman untuk begitu lama).

Namun, keuntungan besar menggunakan UUID sebagai PK adalah jika kita memiliki cluster DB, tidak akan ada konflik saat menggabungkan.

Saya akan merekomendasikan model berikut:1. Identitas PK INT2. Kolom tambahan dibuat secara otomatis sebagai UUID.

Dengan cara ini, proses penggabungan dimungkinkan (UUID akan menjadi kunci NYATA Anda, sedangkan PK hanya akan menjadi sesuatu yang sementara yang memberi Anda kinerja yang baik).

CATATAN:Bahwa solusi terbaik adalah menggunakan NEWSEQUENTIALID (seperti yang saya katakan di komentar), tetapi untuk aplikasi lawas dengan tidak banyak waktu untuk refactor (dan lebih buruk lagi, tidak mengontrol semua sisipan), itu tidak mungkin dilakukan. Tapi memang pada 2017, saya akan mengatakan solusi terbaik di sini adalah NEWSEQUENTIALID atau melakukan Guid.Comb dengan NHibernate.

Semoga membantu



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. XAMPP - MySQL mati secara tidak terduga

  2. Pandangan mendalam tentang Pengindeksan Basis Data

  3. Bagaimana cara mengubah hasil SQL Query ke Struktur Data PANDAS?

  4. Cara Mendapatkan Tahun dari Kolom Datetime di MySQL

  5. Contoh CURRENT_TIME – MySQL