导致MySQL基数降低的原因是什么?

时间:2014-07-17 21:11:24

标签: mysql performance indexing cardinality

在我们的MySQL系统生产中,我们有一些查询通常需要不到2秒的时间才能执行,但有时会运行超过一分钟。每当其中一个查询运行很长时,我们都会检查索引并发现基数在同一​​个VARCHAR(25)字段中已经丢失。我们将MySQL作为具有多个从站的主集群运行,我们会发现只有那个慢速系统的基数已经减少,所有其他服务器上的值仍然很高。当值下降时,它将从大约20k-30k(高值)下降到仅几百。运行ANALYZE TABLE命令可修复基数并将其备份到20k-30k,并且查询再次快速运行。

我已开始监控所有表格的基数,以了解此值如何随时间变化。我知道基数会随着新数据的增加而上升,我希望它会随着记录的删除而下降,但是这个表很少会删除记录,但每次看到它时值都会上下变化。

MySQL 5.5.8 InnoDB

CentOS 5.7

关于我应该寻找什么的任何想法? COUT(*)= 402259

1 个答案:

答案 0 :(得分:1)

InnoDB表的统计数据是近似值,不准确。因此,如果您想知道字段的确切基数,可以运行此查询:

SELECT COUNT(DISTINCT field_name) FROM table_name