在我们的生产 MySQL 系统中,我们有一些查询通常需要不到 2 秒的时间来执行,但有时它们会运行超过一分钟。每次这些查询中的一个运行很长时间时,我们都会检查索引并发现基数在同一个 VARCHAR(25) 字段上下降了。我们将 MySQL 作为一个主集群和多个从集群运行,我们会发现只有那个慢系统的基数有所下降,而在所有其他服务器上该值将保持高位。当值(value)下降时,它将从大约 20k-30k(高值(value))下降到只有几百。运行 ANALYZE TABLE 命令修复基数并将其备份到 20k-30k,查询再次快速运行。
我已经开始监控所有表的基数,以查看该值如何随时间变化。我知道基数会随着新数据的添加而上升,我希望它会随着记录被删除而下降,但这个表很少删除记录,但每次我查看它时,该值都会上下波动。
MySQL 5.5.8 InnoDB
中央操作系统 5.7
关于我应该寻找什么的任何想法? COUT(*) = 402259
最佳答案
InnoDB 表的统计数据是近似的,并不准确。所以,如果你想知道一个字段的确切基数,你可以运行这个查询:
SELECT COUNT(DISTINCT field_name) FROM table_name
关于mysql - 是什么导致 MySQL 基数减少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24813604/