Saya memiliki skema lama (penafian!) Yang menggunakan id yang dihasilkan berbasis hash untuk kunci utama untuk semua tabel (ada banyak). Contoh dari id tersebut adalah:
922475bb-ad93-43ee-9487-d2671b886479
Tidak ada harapan untuk mengubah pendekatan ini, namun kinerja dengan akses indeks buruk. Mengesampingkan segudang alasan ini mungkin, ada satu hal yang saya perhatikan yang tampaknya kurang optimal - meskipun semua nilai id dalam semua tabel panjangnya persis 36 karakter, jenis kolomnya varchar(36)
, tidak char(36)
.
Akankah mengubah jenis kolom menjadi panjang tetap char(36)
menawarkan manfaat kinerja indeks yang signifikan , di luar peningkatan yang sangat kecil dalam jumlah entri per halaman indeks dll?
Yaitu apakah postgres berkinerja lebih cepat ketika berhadapan dengan tipe dengan panjang tetap daripada dengan tipe dengan panjang variabel?
Tolong jangan menyebutkan penghematan penyimpanan sangat kecil - itu tidak akan menjadi masalah dibandingkan dengan operasi yang diperlukan untuk membuat perubahan ke kolom.
sumber
char(n)
hampir tidak pernah menang dalam hal apa pun. Jangan gunakan itu. Tipe datatext
danvarchar
(tanpa pengubah panjang) adalah biner yang kompatibel dan berbagi karakteristik kinerja yang sama. Ada alasan historis bagi keduanya untuk hidup berdampingan di Postgres. Secara internal,text
adalah tipe "disukai" di antara tipe string (yang dapat memengaruhi resolusi tipe fungsi). Siklus CPU untuk menegakkanvarchar(n)
hampir tidak penting. Gunakan batasan panjang saat Anda membutuhkannya . Dalam hal iniuuid
adalah pemenang sebenarnya.