무엇을 확인하기 위해 CLUSTER
초기 실험에서 기본적으로 첫 천만개의 양의 정수를 포함하는 표를 가져 왔습니다. 이미 일부 행을 삭제하고 다른 열도 있지만 실제 테이블 크기에만 영향을 미치므로 흥미롭지 않습니다.
먼저 VACUUM FULL
테이블 fka
에서 실행 하면서 크기를 가져 왔습니다.
\dt+ fka
List of relations
Schema | Name | Type | Owner | Size | Description
--------+------+-------+----------+--------+-------------
public | fka | table | test | 338 MB |
그런 다음 테이블의 맨 처음부터 데이터의 물리적 순서를 봅시다.
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)
이제 일부 행을 삭제하겠습니다 :
DELETE FROM fka WHERE id % 10 = 5;
--DELETE 1000000
이 후에도보고 된 테이블 크기는 변경되지 않았습니다. 이제 무엇을하는지 보자 CLUSTER
.
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)
작업 후 테이블 크기가 338MB에서 296MB로 변경되었습니다. ctid
페이지에서 튜플의 실제 위치를 설명 하는 열에서 행 일치와의 간격이 없다는 id = 5
것을 알 수 있습니다.
튜플이 재정렬되면 인덱스가 올바른 위치를 가리 키도록 다시 작성되어야합니다.
따라서 차이점은 VACUUM FULL
행을 정렬하지 않는 것 같습니다. 내가 아는 한, 두 명령이 사용하는 메커니즘에는 약간의 차이가 있지만 실제적인 관점에서 이것은 주된 (단지?) 차이로 보입니다.