-
풀 테이블 스캔
- 테이블을 처음부터 끝까지 읽어서 쿼리를 처리하는 작업
- MySQL 옵티마이저가 주로 풀 테이블 스캔을 선택하는 조건
- 테이블의 레코드 건수가 너무 작아서 인덱스를 활용하지 않아도 되는 겨우
- 조건절에서 인덱스 사용 조건이 맞지 않는 경우(인덱스 컬럼 변형, 첫번째 인덱스 컬럼 생략)
- 인덱스를 활용할 수 있는 경우라도 레코드 손익 분기점을 넘긴 경우(전체 레코드의 20~25%를 넘는 경우 풀 테이블 스캔의 비용이 저럼)
- 풀 테이블 스캔을 하게 되면 디스크 I/O작업이 자주 일어나게 됨
- 위를 보완하고자 리드 어헤드 사용
-
리드 어헤드
- 데이터를 조회하는 경우 페이지 단위로 묶어서 읽어오게 됨
- 많은 데이터를 읽어서 특정 부분의 페이지를 지속적으로 읽어오는 경우 조회할 다음 페이지를 예측하여 미리 InnoDB의 버퍼에 적재
- 미리 적재하여 버퍼 풀에 적재된 데이터를 가져오기 때문에 속도가 빨라짐
- innodb_read_ahead_threshold 변수를 통해 지정한 개수 이상의 페이지를 조회하는 경우 리드 어헤드를 사용하도록 설정 가능