13

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

在将我的本地数据库副本上的一些 EXPLAIN 结果与实时副本进行比较时,我注意到多字段索引未在实时的某些地方使用,而是在本地使用,进一步调查表明,这些索引的基数为NULL就直播。

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

非常感谢您的回复!

4

2 回答 2

16

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

非 NULL 基数对于 MySQL 使用该索引是关键/必需的。

关于基数的一点:它是一个字段唯一性的度量。越独特(值越高),该字段上的索引就越有效,并且会触及更少的记录。NULL 基数与 0(零)基数不同。
阅读:显示索引

-- 杰杰 --

于 2011-07-26T21:02:54.580 回答
1

根据 fsb 的有用发现,我猜您正在使用 MyISAM,并建议您迁移到 InnoDB,它多年来一直被认为是一种卓越的表引擎。

InnoDB 的众多功能之一是自动维护索引

于 2011-07-22T17:19:21.270 回答