列索引的mysql基数大于该列中的唯一值

时间:2018-10-14 01:36:06

标签: mysql indexing cardinality

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

我期望列索引的基数能够反映列中唯一值的数量。在这种情况下,数字有很大的不同-是指示某种问题,例如索引损坏吗?

我已经运行了“优化表”,它并没有改变该索引的基数。

1 个答案:

答案 0 :(得分:0)

有关索引的MySql文档指出:

  

基数

     

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

     

基数是根据存储为整数的统计数据计算的,因此   值即使对于小桌子也不一定准确。越高   基数,MySQL在以下情况下使用索引的机会越大   做联接。

大胆的强调是我的。计算索引的基数很多,包括服务器内存可用性和磁盘空间。

我不会把重点放在基数计算不正确上,尤其是因为您已经运行了print(tabulate([training_step, train_accuracy, test_accuracy], headers=['Step', 'Train_accuracy', 'Test_accuracy']))命令。相反,请对查询运行解释计划,以确保您的查询正在使用索引。