在MySQL 5.x中,索引中的NULL基数是否是一个问题?

14

我在一个系统的线上版本上遇到了性能问题,但是我无法在本地复现这个问题。

通过比较几个数据库EXPLAIN结果,我发现在线上版本中某些地方没有使用多字段索引,而在本地版本中有使用。进一步调查发现,这些索引在线上版本上的基数为NULL。

我猜测这是问题所在,但空值基数表示什么意思?会导致索引未被使用吗?优化可以解决此问题吗?如何防止其再次出现?由于我无法完全访问线上MySQL数据库,因此分析和优化超出了我的正常能力范围。

非常感谢任何回复!


这个看起来相关吗:http://bugs.mysql.com/bug.php?id=40983 - user213154
2个回答

17

在MyISAM表的索引上出现NULL基数时,是在创建表(或截断)并填充数据后发生的。加载之后,用户必须执行“分析表x”才能有效地获得该表的基数。在InnoDB表中存在类似的问题,需要定期执行“分析表x”以确保最佳的索引性能。MySQL数据库引擎不会自动更新索引基数,除了单列主键的情况。

对于MySQL来说,非NULL基数是至关重要/必需的,以利用该索引。

关于基数的一点说明:它是字段唯一性的度量标准。越唯一(高值),在该字段上的索引就越有效,并且会触及较少的记录。 NULL基数与0(零)基数不同。阅读本文:SHOW INDEX

-- JJ --


0
根据fsb的有用发现,我猜测您正在使用MyISAM,并建议您转移到InnoDB,因为它被认为是一种优秀的表引擎已经有几年了。
InnoDB的许多功能之一是索引的自动维护

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接