MySQL 5.5 버전까지
SHOW INDEX
명령으로만 테이블 인덱스 칼럼의 분포도를 볼 수 있다.MySQL 5.6 버전부터
mysql
데이터베이스의 innodb_index_stats
테이블과 innodb_table_stats
테이블로 관리할 수 있게 개선됐다.STATS_PERSISTENT
옵션을 설정할 수 있다.CREATE TABLE tab_test (fd1 INT, fd2 VARCHAR(20), PRIMARY KEY(fd1))
ENGINE=InnoDB
STATS_PERSISTENT={ DEFAULT | 0 | 1 }
STATS_PERSISTENT=0
mysql
데이터베이스의 innodb_index_stats
테이블과 innodb_table_stats
테이블에 저장하지 않는다.STATS_PERSISTENT=1
mysql
데이터베이스의 innodb_index_stats
테이블과 innodb_table_stats
테이블에 저장한다.STATS_PERSISTENT=DEFAULT
STATS_PERSISTENT
옵션을 설정하지 않은 것과 동일하다.innodb_stats_persistent
시스템 변수의 값으로 결정한다.innodb_stats_persistent
시스템 설정 변수는 기본적으로 ON(1)로 설정돼 있다. 즉, 영구적으로 관리한다.mysql
데이터베이스의 innodb_table_stats
테이블의 통계 정보를 조회하면, STATS_PERSISTENT=1
로 생성한 테이블의 통계 정보만 조회된다.ALTER TABLE
명령으로 영구적 또는 단기적으로 변경할 수 있다.-- 통계 정보를 영구적으로 변경
ALTER TABLE employees.employees STATS_PERSISTENT=1;
-- 통계 정보 조회
SELECT *
FROM innodb_index_stats
WHERE database_name='employees'
AND TABLE_NAME='employees';
SELECT *
FROM innodb_table_stats
WHERE database_name='employees'
AND TABLE_NAME='employees';
통계 정보의 각 칼럼은 다음과 같은 값을 저장하고 있다.
innodb_index_stats.stat_name='n_diff_pfx%'
innodb_index_stats.stat_name='n_leaf_pages'
innodb_index_stats.stat_name='size'
innodb_table_stats.n_rows
innodb_table_stats.clustered_index_size
innodb_table_stats.sum_of_other_index_sizes
STATS_AUTO_RECALC
옵션에 따라 0으로 보일 수도 있다. 이 때는 ANALYZE TABLE
명령을 실행하면 통곗값이 저장된다.ANALYZE TABLE
명령이 실행되는 경우SHOW TABLE STATUS
명령이나 SHOW INDEX FROM
명령이 실행되는 경우innodb_stats_on_metadata
시스템 설정이 ON인 상태에서 SHOW TABLE STATUS
명령이 실행되는 경우innodb_stats_auto_recalc
시스템 설정 변수의 값을 OFF로 설정해서 통계 정보가 자동으로 갱신되는 것을 막을 수 있다.innodb_stats_auto_recalc
시스템 설정 변수의 기본값은 ON이므로, 영구적인 통계 정보를 이용하고자 한다면 OFF로 변경해야 한다.STATS_AUTO_RECALC
옵션을 이용해 테이블 단위로 조정할 수 있다.STATS_AUTO_RECALC=1
STATS_AUTO_RECALC=0
ANALYZE TABLE
명령을 실행할 때만 수집된다.STATS_AUTO_RECALC=DEFAULT
STATS_AUTO_RECALC
옵션을 설정하지 않은 것과 동일하다.innodb_stats_auto_recalc
시스템 설정 변수의 값으로 결정한다.innodb_stats_sample_pages
시스템 설정 변수가 제공된다.innodb_stats_transient_sample_pages
innodb_stats_persistent_sample_pages
ANALYZE TABLE
명령이 실행되면 임의로 20개 페이지만 샘플링해서 분석하고 그 결과를 영구적인 통계 정보 테이블에 저장하고 활용함을 의미한다.innodb_stats_persistent_sample_pages
시스템 변수에 높은 값을 설정하면 된다.