Bu kesinlikle. Bu konuyla ilgili ayrıntılı olarak şunları tartıştık:
Boşluk, MAXALIGN64-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 integersü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 UNIQUEkısıtlamanın endeksi olduğundan mümkün değildir . Postgres 11’den bu yana, sadece cümlesiyle sadece bkısıtlama tanımına ekleme yapmaktan kurtulabilirsiniz INCLUDE. Kılavuzdaki detaylar.
Veya(b,a) sadece bek 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: