我在无法在本地复制的系统的实时版本上遇到性能问题。
在将我的本地数据库副本上的一些 EXPLAIN 结果与实时副本进行比较时,我注意到多字段索引未在实时的某些地方使用,而是在本地使用,进一步调查表明,这些索引的基数为NULL就直播。
我猜这是问题所在,但是 NULL 基数是什么意思,它会导致索引不被使用吗?Optimize 会解决这个问题吗?有没有办法防止它再次发生?我没有对实时 MySQL 数据库的完全访问权限,因此分析和优化超出了我的正常能力。
非常感谢您的回复!
我在无法在本地复制的系统的实时版本上遇到性能问题。
在将我的本地数据库副本上的一些 EXPLAIN 结果与实时副本进行比较时,我注意到多字段索引未在实时的某些地方使用,而是在本地使用,进一步调查表明,这些索引的基数为NULL就直播。
我猜这是问题所在,但是 NULL 基数是什么意思,它会导致索引不被使用吗?Optimize 会解决这个问题吗?有没有办法防止它再次发生?我没有对实时 MySQL 数据库的完全访问权限,因此分析和优化超出了我的正常能力。
非常感谢您的回复!
MyISAM 表索引上的 NULL 基数在创建(或截断)表并填充数据时发生。加载后,用户必须执行“分析表 x”以有效地获得该表的基数。InnoDB 表中存在类似问题,需要定期执行“分析表 x”以确保最佳索引性能。MySQL 数据库引擎不会自动更新索引基数,单列主键除外。
非 NULL 基数对于 MySQL 使用该索引是关键/必需的。
关于基数的一点:它是一个字段唯一性的度量。越独特(值越高),该字段上的索引就越有效,并且会触及更少的记录。NULL 基数与 0(零)基数不同。
阅读:显示索引
-- 杰杰 --
根据 fsb 的有用发现,我猜您正在使用 MyISAM,并建议您迁移到 InnoDB,它多年来一直被认为是一种卓越的表引擎。
InnoDB 的众多功能之一是自动维护索引。