如何在mysql中查看索引信息_mysql索引查看方式

MySQL中查看索引信息最常用方法是SHOW INDEX语句和查询INFORMATION_SCHEMA.STATISTICS表;前者快速查看单表索引详情,后者支持跨库筛选;EXPLAIN用于验证索引是否生效,结合索引大小、基数等可全面评估索引设计合理性。

在 MySQL 中查看索引信息,最常用且直接的方式是使用 SHOW INDEX 语句或查询 INFORMATION_SCHEMA.STATISTICS 系统表。不同方式适用于不同场景,下面分几种实用方法说明。

使用 SHOW INDEX 查看表的索引详情

这是最简单快捷的方法,适合快速确认某张表有哪些索引、字段顺序、是否唯一等基础信息。

  • 语法:SHOW INDEX FROM 表名 [FROM 数据库名];
  • 例如:SHOW INDEX FROM users;SHOW INDEX FROM users FROM mydb;
  • 返回结果中关键字段说明:
    Table:表名
    Key_name:索引名称(PRIMARY 表示主键,自定义名如 idx_email)
    Column_name:索引包含的列名(注意顺序)
    Seq_in_index:该列在联合索引中的位置(1 表示第一列)
    Non_unique:0 表示唯一索引,1 表示非唯一
    Index_type:BTREE、HASH(Memory 引擎)、FULLTEXT 等

通过 INFORMATION_SCHEMA 查询索引(支持条件筛选)

当需要跨库查索引、按列名过滤、或写脚本批量分析时,推荐查系统表,更灵活。

  • 基本查询:SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = '数据库名' AND TABLE_NAME = '表名';
  • 只看非主键的普通索引:WHERE INDEX_NAME != 'PRIMARY'
  • 查某个字段参与了哪些索引:AND COLUMN_NAME = 'email'
  • 注意:SEQ_IN_INDEX > 1 表示是联合索引的后续列,需结合 INDEX_NAMESEQ_IN_INDEX 判断完整结构

用 EXPLAIN 辅助验证索引是否生效

SHOW INDEX 只告诉你“有什么索引”,而 EXPLAIN 能告诉你“查询时用了哪个索引”。

  • 执行:EXPLAIN SELECT * FROM users WHERE email = 'a@b.com';
  • 重点关注字段:
    key:实际使用的索引名(NULL 表示未命中)
    key_len:索引使用长度(可推断是否用全联合索引)
    possible_keys:可能用到的索引列表
  • 配合 SHOW INDEX 结果,能判断索引设计是否合理(比如联合索引 (a,b,c),WHERE a=1 AND b=2 会用上,但 WHERE b=2 就不会)

查看索引大小与统计信息(高级用途)

对于性能调优,有时还需知道索引占了多少空间、数据分布是否均匀。

  • 查索引大小(近似值):SELECT DATA_LENGTH, INDEX_LENGTH FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='数据库名' AND TABLE_NAME='表名';
  • 更新索引统计(影响优化器选择):ANALYZE TABLE 表名;(InnoDB 通常自动收集,但大表手动触发更准)
  • 查看索引基数(Cardinality):SHOW INDEX 结果中的 Cardinality 列,数值越大说明该列区分度越高,越适合作为索引首列