我有一个表(InnoDB)有相当数量的指数。知道这些中的一个(或多个)是否从未被实际使用过,这将是非常好的。我不太关心磁盘空间,但插入速度有时是一个问题。MySQL是否记录使用索引的频率?
MySQL是否记录运行查询时使用每个索引的频率的统计信息?
我有一个表(InnoDB)有相当数量的指数。知道这些中的一个(或多个)是否从未被实际使用过,这将是非常好的。我不太关心磁盘空间,但插入速度有时是一个问题。MySQL是否记录使用索引的频率?
MySQL是否记录运行查询时使用每个索引的频率的统计信息?
有一个way找到一个小的补丁到MySQL的未使用的索引。
AFAIK,它只记录索引用法的总数。
SHOW STATUS;
有Select_scan
列。
我建议开启分析并做一些瓶颈分析。
set profiling=1;
在这之后,您可以让一些沉重的查询运行一段时间。最后,您将它关闭,然后检查运行时查看哪些最重的查询。如果您没有看到任何
其他一些命令需要注意的是:
show profiles;
select sum(duration) from information_schema.profiling where query_id=<ID you want to look at>;
show profile for query <you want to look at>;
最后,如果你希望看到未使用的索引和你有userstats启用
SELECT DISTINCT s.TABLE_SCHEMA, s.TABLE_NAME, s.INDEX_NAME
FROM information_schema.statistics `s` LEFT JOIN information_schema.index_statistics INDXS
ON (s.TABLE_SCHEMA = INDXS.TABLE_SCHEMA AND
s.TABLE_NAME=INDXS.TABLE_NAME AND
s.INDEX_NAME=INDXS.INDEX_NAME)
WHERE INDXS.TABLE_SCHEMA IS NULL;
的计划查询唐变化不大 - 打开(慢)查询日志记录阈值为0秒,然后用您选择的语言编写一段代码来解析日志文件,并将所有文字删除查询,然后解释计划对于执行超过'N'次的任何查询。
C.
简单,或许,但“小”?它长达4000行,触及数十个源文件,包括词法分析器!但它声称做我想要的东西,所以很好找。 :-) – Ken 2010-01-15 21:41:33