索引中的NULL基数是一个问题 - MySQL 5.x.

时间:2011-06-29 13:46:45

标签: mysql null indexing cardinality

我在系统的实时版本上遇到性能问题,我无法在本地重现。

在比较我的本地数据库副本上的一些EXPLAIN结果和实时数据时,我注意到多个字段索引在现场的某些地方没有使用但是在本地,并且进一步调查表明这些索引有直播的基数为NULL。

我猜这是问题,但是NULL基数是什么意思,它会导致索引不被使用? Optimize会解决这个问题吗?有没有办法防止它再次发生?我没有完全访问实时MySQL数据库的权限,因此Analyze和Optimize超出了我的正常能力。

非常感谢您的回复!

2 个答案:

答案 0 :(得分:16)

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

非NULL基数对于MySQL利用该索引至关重要。

关于基数的一点:它衡量一个领域的唯一性。更独特(更高的值),该字段上的索引越有效,并且将触及更少的记录。 NULL基数与0(零)基数不同     阅读本文:SHOW INDEX

- JJ -

答案 1 :(得分:1)

根据fsb的有用发现,我猜你正在使用MyISAM,并建议你转移到InnoDB,它已经被认为是一个优秀的表引擎已有几年了。

InnoDB的许多功能之一是automatic maintenance of indexes