Bagaimana PostgreSQL secara fisik memesan catatan baru pada disk (setelah cluster pada kunci utama)?

9

Perlu tahu bagaimana PostgreSQL memesan catatan pada disk. Dalam hal ini, saya ingin memanfaatkan kombinasi indeks seperti yang dinyatakan dalam dokumen , yang seperti yang saya pahami menggunakan bitmap untuk mendapatkan baris yang cocok dan mengembalikannya sesuai dengan lokasi fisik mereka. Tabel yang dimaksud telah dikelompokkan oleh kunci utamanya.

Seperti yang saya pahami, PostgreSQL tidak secara otomatis melanjutkan pengelompokan setelah pengelompokan selesai (walaupun ia ingat bahwa pengelompokan berdasarkan indeks tertentu). Sekarang, karena ini adalah kunci utama, saya bertanya-tanya apakah urutan penyimpanan fisik akan sesuai dengan itu (yang jika benar saya ingin menggunakan untuk keuntungan kami untuk permintaan tertentu).

Singkatnya, bagaimana PostgreSQL memesan catatan baru, terutama setelah pengelompokan?

Terima kasih banyak!

Juan Carlos Coto
sumber

Jawaban:

9

Baris di postgresql tidak memiliki urutan pasti. Tidak hanya catatan ditempatkan di mana pun ada catatan ruang bebas juga dapat bergerak. Ini karena ketika sebuah baris diperbarui, versi baru dari baris tersebut dibuat di lokasi baru sementara versi lama terus hidup di lokasi yang lama hingga dihapus oleh ruang hampa.

Operasi CLUSTER mengurutkan semua baris tetapi tidak mempengaruhi bagaimana postgresql menambahkan baris. Jadi data tidak akan tetap diurutkan. Namun postgresql menyimpan statistik di antaranya adalah korelasi untuk setiap kolom antara urutan baris dalam tabel dan urutan diurutkan dari kolom itu. Jadi perencana masih dapat mengoptimalkan rencananya berdasarkan statistik yang mengatakan bahwa tabel itu sebagian besar masih diurutkan bahkan jika beberapa baris telah ditambahkan setelah operasi klaster (atau telah dipindahkan oleh pembaruan).

Eelke
sumber