Saya sedang mempertimbangkan menggunakan CLUSTER untuk menyusun ulang tabel dengan indeks. Saya mengerti bahwa rekreasi data tabel ini membuat semua indeks yang ada baik kembung atau tidak berguna. Saya telah melihat beberapa indikasi bahwa REINDEX diperlukan setelah CLUSTER. Saya telah menemukan referensi lain yang menunjukkan bahwa CLUSTER melakukan REINDEX. The Dokumentasi Resmi mengatakan apa-apa tentang Reindex menjadi bagian dari CLUSTER atau diperlukan (Meskipun itu menyarankan berjalan ANALISIS setelah KLASTER yang)
Adakah yang bisa secara definitif (yaitu dengan semacam referensi ke dokumen resmi) mengatakan apakah REINDEX diperlukan atau tidak setelah CLUSTER?
postgresql
POHON
sumber
sumber
cluster
memindahkan baris, sehingga harus memperbarui informasi indeks.Jawaban:
Anda tidak perlu mengindeks ulang, karena
CLUSTER
secara efektif melakukannya untuk Anda.Lebih khusus lagi,
CLUSTER
kunci tabel sumber kemudian buat salinan baru yang dipesan sesuai dengan indeks target. Itu membuat indeks pada salinan baru kemudian menggantikan tabel lama dan indeks dengan yang baru.Perhatikan bahwa ini juga berlaku
VACUUM FULL
di 9.0+.Jika Anda telah melihat diskusi yang menyarankan bahwa
CLUSTER
indeks bloats mungkin orang-orang yang menganggapnyaCLUSTER
berfungsi seperti pra-9.0VACUUM FULL
. Anda mungkin juga melihat dan salah membaca diskusi yang menyebutkan index bloat yang disebabkan olehVACUUM FULL
implementasi lama dan menyarankanCLUSTER
sebagai alternatif .Ini tersirat dalam dokumentasi :
Apa yang tidak dikatakan, tetapi harus, adalah bahwa salinan sementara itu kemudian mengganti tabel asli . (Tambang tebal).
sumber
CLUSTER
tidak tidak menulis ulang indeks, dan pemeriksaan file yang sebenarnya dibase/
jelas akan menunjukkan barurelfilenode
s. Sepertinya Anda mengkhawatirkan masalah yang belum Anda miliki.Saya dengan a_horse_with_no_name tentang ini: Anda tidak perlu membuat ulang indeks. Selain itu,
CLUSTER
dokumentasi tidak menyebutkannya, kami juga dapat berkonsultasi lebih lanjut denganREINDEX
halaman ini:Jelas,
CLUSTER
tidak termasuk dalam semua kasus ini.Dan ada sebuah kalimat kecil dalam
CLUSTER
dokumen:Ini menunjukkan bahwa seperti tabel itu sendiri, indeks juga disusun ulang selama proses - cara ini membuat pengindeksan ulang tidak berguna.
sumber
Menemukan referensi, di bagian Memulihkan Ruang Disk .
sumber
Menganalisis semua jawaban, menurut saya cara yang tepat untuk melakukan itu adalah dengan memasukkan kembali SEBELUM cluster. Karena dokumentasi tidak mengetahui apakah cluster melakukan atau tidak indeks ulang, dan hanya salinan indeks, dipesan atau tidak, saya pikir indeks yang diindeks akan menghasilkan tabel cluster yang lebih baik. Setelah itu analisis akan menyelesaikan pekerjaan. Vakum penuh sebelum semua tampaknya tidak berguna, kecuali klaster dan / atau indeks ulang tidak membebaskan tupel mati
sumber
CLUSTER
danVACUUM FULL
menghasilkan tabel fisik baru - tidak mungkin ada yang mati setelah itu. Ruang yang digunakan oleh salinan lama akan dibebaskan pada akhir operasi.