인덱스없는거(블록i/o:100만)(결과 반환까지 걸린 시간 : 10초) < 다중컬럼인덱스2번(점, 선분)(블록i/o:400백만)(결과 반환까지 걸린 시간 : 3초) < 다중컬럼인덱스1번(블록i/o:선분, 점)(2천 7백만)(결과 반환까지 걸린 시간 : 9초)
인덱스 없을때: Buffers: shared hit=129 read=774883, temp read=40270 written=40395
2번 인덱스 : Buffers: shared hit=3988726 read=17255, temp read=40640 written=40765
1번 인덱스 : Buffers: shared hit=26783101 read=115312, temp read=41383 written=41509
인덱스 2번이 인덱스 1번보다 당연히 빠르고 i/o수가 적은건 알겠는데 인덱스 없는건 full table scan을 하는데 블록 수가 제일 작습니다. 근데 이게 제일 오래걸리구요.
인덱스 사용 안한건 대부분을 disk i/o를 통해가져오는데 비해 인덱스 사용한것들은 대부분을 버퍼 캐시에서 가져옵니다. 원래 풀 테이블 스캔은 버퍼 캐시에 안쌓이나요? 엄청 조금씩 오르긴 하던데 너무 적더라구요.
데이터베이스는 postgresql입니다.
근데 인덱스 없을때 블록수가 제일 적은것도 맞는거고 제일 오래걸리는것도 맞는건가요? |