在我们的MySQL系统生产中,我们有一些查询通常需要不到2秒的时间才能执行,但有时会运行超过一分钟。每当其中一个查询运行很长时,我们都会检查索引并发现基数在同一个VARCHAR(25)字段中已经丢失。我们将MySQL作为具有多个从站的主集群运行,我们会发现只有那个慢速系统的基数已经减少,所有其他服务器上的值仍然很高。当值下降时,它将从大约20k-30k(高值)下降到仅几百。运行ANALYZE TABLE命令可修复基数并将其备份到20k-30k,并且查询再次快速运行。
我已开始监控所有表格的基数,以了解此值如何随时间变化。我知道基数会随着新数据的增加而上升,我希望它会随着记录的删除而下降,但是这个表很少会删除记录,但每次看到它时值都会上下变化。
MySQL 5.5.8 InnoDB
CentOS 5.7
关于我应该寻找什么的任何想法? COUT(*)= 402259
答案 0 :(得分:1)
InnoDB表的统计数据是近似值,不准确。因此,如果您想知道字段的确切基数,可以运行此查询:
SELECT COUNT(DISTINCT field_name) FROM table_name