MySQL中Cardinality值的介绍(2)

当然,有一种情况可以使得用户每次观察到的索引Cardinality值是一样的。那就是表足够小,表的叶子节点树小于或者等于8个。这时即使随机采样,也总是会采取倒这些页,因此每次得到的Cardinality值是相同的

在InnoDB1.2版本之前,可以通过innodb_stats_sample_pages用来设置统计Cardinality时每次采样页的数量,默认为8.同时,参数innodb_stats_method用来判断如何对待索引中出现NULL值记录。该参数默认值为nulls_equal,表示将NULL值记录为相等的记录。其有效值还nulls_unequal,nulls_ignored,分别表示将NULL值记录视为不同的记录和忽略NULL值记录。例如某夜中索引记录为NULL、NULL、1、2、2、3、3、3,在参数innodb_stats_method默认设置下,该页的Cardinality为4;若参数innodb_stats_method为nulls_unequal,则该页的Cardinality为5,若参数innodb_stats_method为nulls_ignored,则Cardinality值为3

当执行ANALYZE TABLE、SHOW TABLE STATUS、SHOW INDEX 以及访问INFORMATION_SCHEMA架构下的表TABLES和STATISTICS时会导致InnoDB存储引擎会重新计算索引Cardinality值,若表中的数据量非常大,并且表中存在多个辅助索引时,执行上述操作可能会非常慢,虽然用户可能并不希望去更新Cardinality值

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b3d7e08b78d17cde36a6665d3139dc19.html