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=0mysql 데이터베이스의 innodb_index_stats 테이블과 innodb_table_stats 테이블에 저장하지 않는다.STATS_PERSISTENT=1mysql 데이터베이스의 innodb_index_stats 테이블과 innodb_table_stats 테이블에 저장한다.STATS_PERSISTENT=DEFAULTSTATS_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_rowsinnodb_table_stats.clustered_index_sizeinnodb_table_stats.sum_of_other_index_sizesSTATS_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=1STATS_AUTO_RECALC=0ANALYZE TABLE 명령을 실행할 때만 수집된다.STATS_AUTO_RECALC=DEFAULTSTATS_AUTO_RECALC 옵션을 설정하지 않은 것과 동일하다.innodb_stats_auto_recalc 시스템 설정 변수의 값으로 결정한다.innodb_stats_sample_pages 시스템 설정 변수가 제공된다.innodb_stats_transient_sample_pagesinnodb_stats_persistent_sample_pagesANALYZE TABLE 명령이 실행되면 임의로 20개 페이지만 샘플링해서 분석하고 그 결과를 영구적인 통계 정보 테이블에 저장하고 활용함을 의미한다.innodb_stats_persistent_sample_pages 시스템 변수에 높은 값을 설정하면 된다.