mysql - 是什么导致 MySQL 基数减少?

标签 mysql performance indexing cardinality

在我们的生产 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/

相关文章:

javascript - 在网站 PHP 上注册时不显示错误

php - 带有或条件的Mysql案例

mysql - 非典型 Mysql Query 的执行顺序

mysql - 在mysql查询中生成序列号

android - 支持的最大图像尺寸是多少

mysql - 改变表增加索引长度

arrays - Matlab 对象数组的逻辑索引

c#悖论: Converting List to Array is Iterating more efficient?

mysql - 加速 MySQL 存储例程

java - solr 按范围搜索( double )