Untuk menyimpan UUID 128 bit, ada beberapa opsi penyimpanan:
- kolom byte [16]
- dua kolom bigint / long (64 bit)
- a CHAR (36) kolom - 32 digit hex + 4 strip.
- kolom khusus basis data UUID, jika db mendukungnya
Dari sudut pandang pengindeksan mana yang paling efisien? Jika db tidak mendukung tipe uuid khusus, manakah dari 1, 2, 3 yang merupakan kandidat terbaik?
sql-server
mysql
oracle
postgresql
index
Vlad Mihalcea
sumber
sumber
raw(16)
di Oracle danuuid
di PostgreSQL.uuid
>>bytea
>>text
denganCHECK
kendala>varchar(36)
>>char(36)
. Lihat: dba.stackexchange.com/a/89433/3684 dan dba.stackexchange.com/a/115316/3684 .Jawaban:
uuid
Jenis khusus adalah taruhan terbaik Anda untuk PostgreSQL. Sulit dikatakan dengan DB lain - bukan tidak mungkin bagi seseorang untuk memaksakanuuid
jenis yang disimpan kurang efisien daripada jenis byte sederhana.Sekali lagi di PostgreSQL,
bytea
akan menjadi cara yang masuk akal untuk menyimpan UUID jika Anda tidak memilikiuuid
tipenya. Untuk DB lain tergantung pada bagaimana mereka menyimpan data biner.Jika memungkinkan saya akan sangat menghindari menggunakan hex-with-strip. Cara ini kurang efisien untuk membandingkan, mengurutkan, dan menyimpan.
Jadi sungguh, "tidak (2) atau (3)". Pernah. Gunakan (4) jika didukung, (1) sebaliknya.
sumber
SELECT ARRAY['ef1e0638-072e-4caa-88b3-97bfa5b2e8c3']::uuid[]
Dalam urutan preferensi: 4,1,2,3 Jangan gunakan UUID sebagai kunci pengelompokan jika menggunakan SQL server, tidak hanya akan terpecah-pecah, kunci pengelompokan digunakan di semua indeks yang tidak dikelompokkan dan Anda akan menambahkan byte tersebut ke setiap baris indeks. Fragmentasi dapat dikurangi dengan menggunakan NEWSEQUENTIALID tetapi biasanya lebih memilih identitas bingint untuk Kunci Clustering Anda daripada GUID untuk mencegah mengasapi indeks lainnya.
Perbedaan antara memilih 1 dari 2 akan bergantung pada seberapa efisien database menangani dua kolom tipe dasar dari satu array tetap kolom. Seharusnya cukup mudah untuk menguji dengan data dummy. Lihatlah kecepatan kueri Anda serta ukuran indeks dan data. Kecil + cepat adalah yang terbaik!
sumber
Orang harus mengira bahwa setiap tipe data yang didukung secara native akan lebih optimal dalam produk daripada apa pun yang dapat disatukan sebagai klien dari produk itu. Setelah itu, apa pun yang memiliki jumlah byte terkecil sehingga Anda mendapatkan baris maksimum per halaman.
sumber