首页 > 解决方案 > 列索引的mysql基数大于该列中的唯一值

问题描述

我正在使用 MySQL 5.6。有一个包含 100 万行的 MISAM 表。此表中的“县”列上有一个 BTREE 索引,该列只有 61 个可能的值。当我在该表上运行“在表中显示索引”时,它报告“县”列上索引的基数为 117554。

我期望列索引的基数反映列中唯一值的数量。在这种情况下,数字非常不同——这是否表明某种问题,比如损坏的索引?

我已经运行了“优化表”,它不会改变这个索引的基数。

标签: mysqlindexingcardinality

解决方案


MySql 关于索引的文档指出:

基数

对索引中唯一值数量的估计要更新此数字,请运行 ANALYZE TABLE 或(对于 MyISAM 表)myisamchk -a。

基数是根据存储为整数的统计信息计算的,因此即使对于小型表,该值也不一定准确。基数越高,MySQL 在进行连接时使用索引的机会就越大。

粗体强调的是我的。计算索引的基数需要做很多事情,包括服务器内存可用性和磁盘空间。

我不会关注不正确的基数计算,特别是因为您已经运行了该optimize table命令。相反,通过对查询运行解释计划来检查以确保您的查询正在使用索引。


推荐阅读