Satırlar için fiziksel depolama alanı Veritabanı Sayfa Düzeni'ndeki dokümanlarda açıklanmaktadır . Aynı satırın sütun içeriğinin tümü, TOAST tarafından düzenlenen içerikler (bir sayfaya sığmayacak kadar büyük) dışında, aynı disk sayfasında depolanır . İçerikler, açıklandığı gibi her sıra içinde sırayla çıkarılır:
Verileri okumak için her bir özniteliği sırayla incelemeniz gerekir. İlk olarak, boş bitmap'e göre alanın NULL olup olmadığını kontrol edin. Eğer öyleyse, bir sonrakine git. Ardından doğru hizalamaya sahip olduğunuzdan emin olun. Alan sabit genişlikli bir alansa, tüm baytlar basitçe yerleştirilir.
En basit durumda (TOAST'lu sütun yok), az sayıda sütun gerekse bile postgres tüm satırı getirecektir. Bu durumda, cevap evettir, daha fazla sütuna sahip olmak, özellikle TOAST eşiğinin altındayken sütun içeriği büyükse, atık tamponu önbelleği üzerinde net bir olumsuz etkiye sahip olabilir.
Şimdi TOAST durumu: tek bir alan ~ 2kB'yi aştığında, motor alan içeriğini ayrı bir fiziksel tabloya kaydeder. Ayrıca, tüm satır bir sayfaya sığmadığında da devreye girer (varsayılan olarak 8kB): alanların bazıları TOAST depolama alanına taşınır. Doc diyor ki:
Değişken uzunluklu bir alansa (attlen = -1), o zaman biraz daha karmaşıktır. Tüm değişken uzunluklu veri türleri, depolanan değerin toplam uzunluğunu ve bazı bayrak bitlerini içeren ortak başlık yapısı yapı varlena'yı paylaşır. Bayraklara bağlı olarak, veriler satır içi veya bir TOAST tablosunda olabilir; sıkıştırılmış da olabilir
TOAST içeriği açıkça gerekmediklerinde getirilmez, bu nedenle getirilecek toplam sayfa sayısı üzerindeki etkileri azdır (sütun başına birkaç bayt). Bu, @ dezso'nun cevabındaki sonuçları açıklar.
Yazmaya gelince, tüm sütunları olan her satır, hangi sütunlar değiştirilirse değiştirilsin, her UPDATE'de tamamen yeniden yazılır. Bu nedenle, daha fazla sütuna sahip olmak, yazma işlemleri için daha maliyetlidir.