我有一组服务器,维护查询执行需要很长时间。这是由于开发人员在不同时间创建的索引造成的。有没有办法监视未使用的索引,以避免对执行产生不利影响。
我有一组服务器,维护查询执行需要很长时间。这是由于开发人员在不同时间创建的索引造成的。有没有办法监视未使用的索引,以避免对执行产生不利影响。
对于 MySQL 5.6 之前的版本,默认包中没有很多用于分析的统计数据,但是有一些非官方补丁可以使用来进行分析。
例如 userstats:http://ourdelta.org/docs/userstats
通过该补丁,您可以分析统计数据和未使用的索引。
请跟随以下链接执行:
https://www.percona.com/blog/2012/06/30/find-unused-indexes/
在 MySQL 5.6 及更高版本中,性能模式(PERFORMANCE_SCHEMA)跟踪索引IO。如果一个索引没有IO活动,则表示它没有被使用。
现在,sys架构提供了一个方便的视图,使得更容易识别未使用的索引:
http://www.markleith.co.uk/2011/04/18/monitoring-table-and-index-io-with-performance_schema/
DROP VIEW IF EXISTS unused_indexes;
CREATE VIEW unused_indexes AS
SELECT object_schema,
object_name,
index_name
FROM performance_schema.table_io_waits_summary_by_index_usage
WHERE index_name IS NOT NULL
AND count_star = 0
ORDER BY object_schema, object_name;
请注意,此处显示的是从上次mysqld重启以来未使用过的索引。PERFORMANCE_SCHEMA统计数据在启动时会被重置。
对于MySQL 5.7及更高版本,您可以使用SYS模式以原始格式或用户可理解的格式检索数据。SYS模式从底层performance_schema和information_schema获取数据并以更好、更易懂的格式呈现。请参考此处。