Bu kesinlikle. Bu konuyla ilgili ayrıntılı olarak şunları tartıştık:
Boşluk, MAXALIGN
64-bit işletim sistemindeki tipik olarak 8 bayt veya 32-bit işletim sistemindeki (çok daha az yaygın) 4 bayt olan katları olarak ayrılır . Emin değilseniz kontrol edin pg_controldata
. Ayrıca, dizinlenmiş sütunların veri türlerine (bazıları hizalama dolgusu gerektirir) ve gerçek içeriğe de bağlıdır.
Örneğin, iki integer
sütun (her biri 4 bayt) üzerindeki bir dizin tipik olarak, bir diğerindeki 4 dizin kadar hizalama dolgusunda kaybedilen bir dizin kadar büyük olur.
Böyle bir durumda sorgu planlayıcısının bir dizini kullanması için bir dezavantajı yoktur (a,b)
- sadece bir dizine kıyasla (a)
. Ve genellikle aynı endeksi kullanmak için birden fazla sorgu olması tercih edilir. Paylaşıldığında, onun (veya bazı bölümlerinin) (hızlı) önbellekte kalma şansı artar.
Zaten bir dizin üzerinde muhafaza ederse (a,b)
, o zaman duygusu sadece başka bir dizin oluşturmak için yapmaz (a)
o sürece - esasen daha küçük. Aynı değil için de geçerlidir (b,a)
vs. (a)
. Daha fazla bilgi için ilk satırdaki bağlantıyı izleyin.
Bunun tersine bir ek endekse ihtiyacınız olduğunda, ters yönden gelirseniz (a,b)
, mevcut bir endeksi sadece (a)
- eğer mümkünse bırakmayı düşünün . Genellikle bu bir PK veya UNIQUE
kısıtlamanın endeksi olduğundan mümkün değildir . Postgres 11’den bu yana, sadece cümlesiyle sadece b
kısıtlama tanımına ekleme yapmaktan kurtulabilirsiniz INCLUDE
. Kılavuzdaki detaylar.
Veya(b,a)
sadece b
ek olarak sorguları da kapsayacak şekilde yeni dizini yaratın . Sadece eşitlik koşulları için btree endekslerindeki indeks ifadelerinin sırası önemli değildir. Ancak, aralık koşullarını içerdiğinde yapar. Görmek:
Yalnızca bir dizine ek sütunlar eklemenin olası dezavantajları vardır; bu yalnızca hizalama dolgusunda kaybedilen boşluğu kullanıyor olsa da
- Her ne zaman ilave sütun güncellendiğinde, endeksin şimdi de güncellenmesi gerekir, bu da işlem yazmak için maliyet ekleyebilir ve daha fazla endeks kabarcığı yaratabilir.
- Herhangi bir indeks sütunu söz konusuyken, masadaki SICAK güncellemeler (Sadece Yığın Tuple) mümkün değildir .
SICAK güncellemeler hakkında daha fazlası:
Nesne boyutları nasıl ölçülür: