首页 文章

如何在MySQL中查看数据库或表的索引?

提问于
浏览
354

如何查看我的数据库是否有任何索引?

对于特定的 table 怎么样?

8 回答

  • 1

    要查看特定表的索引,请使用SHOW INDEX:

    SHOW INDEX FROM yourtable;
    

    要查看特定模式中所有表的索引,可以使用INFORMATION_SCHEMA中的STATISTICS表:

    SELECT DISTINCT
        TABLE_NAME,
        INDEX_NAME
    FROM INFORMATION_SCHEMA.STATISTICS
    WHERE TABLE_SCHEMA = 'your_schema';
    

    删除where子句将显示所有模式中的所有索引 .

  • 5

    如果要同时查看所有数据库中的所有索引:

    use information_schema;
    SELECT * FROM statistics;
    
  • 3
    SHOW INDEX FROM mytable FROM mydb;
    
    SHOW INDEX FROM mydb.mytable;
    

    documentation .

  • 576

    您可以使用此查询来获取索引的数量以及指定数据库中每个表的索引名称 .

    SELECT TABLE_NAME,
           COUNT(1) index_count,
           GROUP_CONCAT(DISTINCT(index_name) SEPARATOR ',\n ') indexes
    FROM INFORMATION_SCHEMA.STATISTICS
    WHERE TABLE_SCHEMA = 'mydb'
          AND INDEX_NAME != 'primary'
    GROUP BY TABLE_NAME
    ORDER BY COUNT(1) DESC;
    
  • 36

    我建议这个查询:

    SELECT DISTINCT s.*
    FROM INFORMATION_SCHEMA.STATISTICS s
    LEFT OUTER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS t 
        ON t.TABLE_SCHEMA = s.TABLE_SCHEMA 
           AND t.TABLE_NAME = s.TABLE_NAME
           AND s.INDEX_NAME = t.CONSTRAINT_NAME 
    WHERE 0 = 0
          AND t.CONSTRAINT_NAME IS NULL
          AND s.TABLE_SCHEMA = 'YOUR_SCHEMA_SAMPLE';
    

    您找到了所有Index only 索引 .

    看待 .

  • 33

    检查db上的所有已禁用索引

    SELECT INDEX_SCHEMA, COLUMN_NAME, COMMENT 
    FROM information_schema.statistics
    WHERE table_schema = 'mydb'
    AND COMMENT = 'disabled'
    
  • 1

    这在我的情况下适用于在索引字段的相应表中获取表名和列名 .

    SELECT TABLE_NAME , COLUMN_NAME, COMMENT 
    FROM information_schema.statistics
    WHERE table_schema = 'database_name';
    
  • 0

    您可以在MySQL工作台中检查索引 . 在性能报告选项卡下,您可以看到系统上所有使用的索引和未使用的索引 . 或者您可以触发查询 .

    select * from sys.schema_index_statistics;
    

相关问题