Untuk memeriksa apa yang CLUSTER
terjadi, saya mengambil tabel untuk saya dari percobaan sebelumnya yang pada dasarnya berisi 10 juta bilangan bulat positif pertama. Saya sudah menghapus beberapa baris dan ada kolom lain juga tetapi ini hanya mempengaruhi ukuran tabel yang sebenarnya, jadi tidak begitu menarik.
Pertama, setelah berlari VACUUM FULL
di atas meja fka
, saya mengambil ukurannya:
\dt+ fka
List of relations
Schema | Name | Type | Owner | Size | Description
--------+------+-------+----------+--------+-------------
public | fka | table | test | 338 MB |
Lalu mari kita lihat urutan fisik data dari awal tabel:
SELECT *, ctid FROM fka ORDER BY ctid LIMIT 5;
id | col1 | ctid
-----+------+---------
2 | 2 | (0,1)
3 | 3 | (0,2)
4 | 4 | (0,3)
5 | 5 | (0,4)
6 | 6 | (0,5)
Sekarang mari kita hapus beberapa baris:
DELETE FROM fka WHERE id % 10 = 5;
--DELETE 1000000
Setelah ini, ukuran tabel yang dilaporkan tidak berubah. Jadi mari kita lihat sekarang apa yang CLUSTER
terjadi:
CLUSTER fka USING fka_pkey;
SELECT *, ctid FROM fka ORDER BY ctid LIMIT 5;
id | col1 | ctid
-----+------+---------
2 | 2 | (0,1)
3 | 3 | (0,2)
4 | 4 | (0,3)
6 | 6 | (0,4)
7 | 7 | (0,5)
Setelah operasi, ukuran tabel berubah dari 338 menjadi 296 MB. Dari ctid
kolom, yang menggambarkan tempat fisik tuple di halaman, Anda juga melihat bahwa tidak ada celah di mana dulu baris yang cocok id = 5
.
Saat tupel disusun ulang, indeks seharusnya dibuat ulang sehingga mengarah ke tempat yang benar.
Jadi perbedaannya terlihat bahwa VACUUM FULL
tidak memesan baris. Sejauh yang saya tahu, ada beberapa perbedaan dalam mekanisme yang digunakan dua perintah tetapi dari sudut pandang praktis ini tampaknya menjadi perbedaan utama (hanya?).