代码之家  ›  专栏  ›  技术社区  ›  Ken

MySQL是否记录了它使用索引的频率?

  •  1
  • Ken  · 技术社区  · 15 年前

    我有一个包含相当多索引的表(InnoDB)。如果知道其中一个(或多个)从未实际使用过,那就太好了。我不太关心磁盘空间,但插入速度有时是个问题。

    4 回复  |  直到 15 年前
        1
  •  0
  •   mluebke    15 年前

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

        2
  •  0
  •   Chris Kannon    15 年前

    我建议打开评测并进行一些瓶颈分析。

    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
  •   Ondra Žižka David Lilljegren    15 年前

    SHOW STATUS; Select_scan

        4
  •  0
  •   symcbean    15 年前

    查询的计划变化不大-以0秒为阈值打开(慢速)查询日志记录,然后用您选择的语言编写一点代码来解析日志文件并去除查询中的所有文本,然后解释执行次数超过“N”次的任何查询的计划。

    C