我有一张表(InnoDB),有很多指数。很高兴知道其中一个(或多个)是否从未真正使用过。我并不关心磁盘空间,但插入速度有时是一个问题。
MySQL是否记录了运行查询时每个索引使用频率的统计信息?
答案 0 :(得分:0)
AFAIK,它只记录索引使用的总数。
SHOW STATUS;
有Select_scan
列。
答案 1 :(得分:0)
有一个way用于查找未使用的索引,其中包含一个小的MySQL补丁。
答案 2 :(得分: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>;
最后,如果您希望查看未使用的索引并启用了用户权限
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;
答案 3 :(得分:0)
查询计划变化不大 - 打开(慢)查询日志记录,阈值为0秒,然后用您选择的语言编写一些代码来解析日志文件并删除所有文字输出查询,然后解释执行超过'N'次的任何查询的计划。
下进行。