在我们的生产MySQL系统中,我们有一些查询通常需要不到2秒的时间来执行,但有时它们会运行一分钟以上。每次这些查询中的一个长时间运行时,我们检查索引,发现基数已经落在相同的VARCHAR(25)字段上。我们将MySQL作为具有多个从服务器的主服务器集群来运行,我们会发现,仅在速度较慢的系统上,基数有所下降,而在所有其他服务器上,该值将保持较高。当数值下降时,它将从大约20k-30k (高值)下降到只有几百。运行ANALYZE TABLE命令修复了基数,并将其备份到20k-30k,查询再次快速运行。
我已经开始监控所有表上的基数,看看这个值是如何随时间变化的。我知道基数会随着新数据的增加而上升,我希望它会随着记录的删除而下降,但这个表很少删除记录,但每次我查看它时,值都会上升和下降。
MySQL 5.5.8 InnoDB
CentOS 5.7
你知道我应该找什么吗?COUT(*) = 402259
发布于 2014-07-18 05:25:26
InnoDB表的统计数据是近似的,不准确。因此,如果您想知道字段的确切基数,可以运行以下查询:
SELECT COUNT(DISTINCT field_name) FROM table_namehttps://stackoverflow.com/questions/24813604
复制相似问题