确定生产站点上是否正在使用mysql索引,因此可以安全地删除它

我们有一些大型索引,我们怀疑它们没有在我们的Rails站点中使用,并且希望删除它们以节省空间和计算.但是,如果事实证明它们被使用,那么这样做可能是灾难性的.我们如何确认它们没有被使用?

一种选择是将所有查询记录一段时间,并对使用该表的任何查询运行“解释计划”.但我听说“解释计划”有时可能不准确.我们还必须收集几个小时的查询才能确定,这是存储和处理的大量日志.

如果有办法暂时禁用索引,我们愿意这样做,只要我们能够在出现问题时快速启用它.但我没有看到普遍这样做的方法;您只能为单个sql语句指定“忽略索引”提示.

最佳答案 简答:

使用MySQL 5.6,可以使用PERFORMANCE_SCHEMA和ps_helper执行此操作.

ps_helper是一系列视图和例程,它们以更有用的方式显示PERFORMANCE_SCHEMA中的数据.你追求的VIEW是这一个:http://www.markleith.co.uk/ps_helper/#schema_unused_indexes

更详细:

禁用索引的想法在Oracle中称为“隐形索引”. MySQL不支持它们,但我也很乐意看到这个功能 – 几个月前我就提交了http://bugs.mysql.com/bug.php?id=70299.

删除未使用的索引非常重要,因为它可以帮助优化器性能.我有一个关于在这里使用ps_helper unused_indexes视图的战争故事:http://www.tocker.ca/2013/09/05/migrating-from-postgresql-to-mysql.html

点赞