Cardinality值
如何查看索引是否具有高选择性?
可以通过SHOW INDEX结果中的列Cardinality来观察。
Cardinality表示索引中不重复记录数量的预估值。注意,是一个预估值。
InnoDB存储引擎的Cardinality统计
Cardinality的统计是放在存储引擎层进行的。
数据库对于Cardinality的统计是通过采样(Sample)的方法来完成的。
采样过程如下
- 取得B+树索引中叶子节点的数量,即为A
- 随机取得B+树索引中的8个叶子节点。统计每个页不同记录的个数
Cardinality= 不同记录个数和 * A / 8
InnoDB存储引擎内部对Cardinality信息的更新策略为
- 表中 1/16 的数据已发生过变化
- stat_modified_counter > 2000000000
手动触发Cardinality更新
ANALYZE TABLE t_xxxSHOW TABLE STATUSSHOW INDEX FROM t_xxx- 访问
INFOMATION_SCHEMA下的TABLES和STATISTICS
如果表的数据量很大,并且存在多个辅助索引时,上述操作的执行会很慢。