mysql - 列索引的mysql基数大于该列中的唯一值
问题描述
我正在使用 MySQL 5.6。有一个包含 100 万行的 MISAM 表。此表中的“县”列上有一个 BTREE 索引,该列只有 61 个可能的值。当我在该表上运行“在表中显示索引”时,它报告“县”列上索引的基数为 117554。
我期望列索引的基数反映列中唯一值的数量。在这种情况下,数字非常不同——这是否表明某种问题,比如损坏的索引?
我已经运行了“优化表”,它不会改变这个索引的基数。
解决方案
MySql 关于索引的文档指出:
基数
对索引中唯一值数量的估计。要更新此数字,请运行 ANALYZE TABLE 或(对于 MyISAM 表)myisamchk -a。
基数是根据存储为整数的统计信息计算的,因此即使对于小型表,该值也不一定准确。基数越高,MySQL 在进行连接时使用索引的机会就越大。
粗体强调的是我的。计算索引的基数需要做很多事情,包括服务器内存可用性和磁盘空间。
我不会关注不正确的基数计算,特别是因为您已经运行了该optimize table
命令。相反,通过对查询运行解释计划来检查以确保您的查询正在使用索引。
推荐阅读
- python - 将 np.random.normal() 添加到每个元素时,为什么我会在数组中获得整数?
- omnet++ - 相扑多边形在静脉模拟中不可见
- node.js - nodejs在discord中查找对消息的所有回复
- reactjs - # 后反应本机链接号不起作用
- javascript - 当用户使用他们的 Google 帐户登录我的网站时,如何获取 authuser 号?
- apache-spark - 使用 pyspark 插入镶木地板文件时,Hive 表需要对每个新分区进行“修复”
- javascript - 在网页上显示缩略图,但通过 JavaScript 以模态显示更大的图像
- javascript - 将 C# AES 加密转换为 CryptoJS
- vb.net - 定时器上的多个条件
- postgresql - 将数据从 Citus 迁移到 RDS