2010-01-15 61 views
1

我有一个表(InnoDB)有相当数量的指数。知道这些中的一个(或多个)是否从未被实际使用过,这将是非常好的。我不太关心磁盘空间,但插入速度有时是一个问题。MySQL是否记录使用索引的频率?

MySQL是否记录运行查询时使用每个索引的频率的统计信息?

回答

0

有一个way找到一个小的补丁到MySQL的未使用的索引。

+0

简单,或许,但“小”?它长达4000行,触及数十个源文件,包括词法分析器!但它声称做我想要的东西,所以很好找。 :-) – Ken 2010-01-15 21:41:33

0

AFAIK,它只记录索引用法的总数。

SHOW STATUS;Select_scan列。

0

我建议开启分析并做一些瓶颈分析。

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

的计划查询唐变化不大 - 打开(慢)查询日志记录阈值为0秒,然后用您选择的语言编写一段代码来解析日志文件,并将所有文字删除查询,然后解释计划对于执行超过'N'次的任何查询。

C.