I/O 비용을 줄이기 위해 index-only scans을 사용할 수 있음.
select 될 column이 모두 index의 column에 포함되어 있어야 table pages에 접근하지 않고 index column만 읽음.
보통 모든 RDBMS에서 제공하지만 PostgreSQL에서는 index column에 포함되어 있다고 무조건 index-only scan을 하지 않음.
index-only scan을 위한 조건
select할 column이 index column이어야 함.
조회하려는 table의 data가 저장된 page의 VM(visibility Map)의 visibility bit가 1이어야 함.
VM까지 확인해야 하는이유
index tuple에는 heap tuple처럼 t_xmin, t_xmax 정보가 저장되지 않음.
그래서 index tuple에 저장된 column 값의 변경 여부를 index만으로는 판단할 수 없음.
그렇다고 table의 page까지 읽으면 비효율적인 상황이 발생함.
그래서 table page에 저장된 값에 변경 여부를 확인하고자 VM을 이용함.
따라서 index-only scans을 위해서는 VM 정보도 확인할 수 밖에 없음.
간단한 예시
index column으로 id와 key를 사용하고 있음.
select 문의 칼럼이 모두 index column이므로 index-only scan을 할 수 있는 첫번 째 조건을 충족함.
그러나 VM의 조건은 아래와 같음.
Tuple_18이 저장된 0번 째 page의 visibility map의 visibility bit =1
Tuple_19가 저장된 1번 째 page의 visibilty map의 bit = 0
Tuple_18의 경우 table의 page를 확인할 필요가 없어 index-only scan 가능.
Tuple_19의 경우 table의 page를 확인해야하므로 index-only scan이 불가능.
'PostgreSQL' 카테고리의 다른 글
21.PostgreSQL - WAL(Write Ahead Log) (2) | 2024.12.28 |
---|---|
20. PostgreSQL - buffer manager (2) | 2024.12.25 |
18. PostgreSQL - Heap-Only Tuples(HOT) (1) | 2024.12.25 |
17. PostgreSQL - vacuum full (3) | 2024.12.25 |
16.PostgreSQL - autovacuum (2) | 2024.12.25 |