mysql如何查看表的索引列表 mysql如何查看表的索引类型分类

mysql如何查看表的索引列表 mysql如何查看表的索引类型分类
最新回答
皮比墙厚

2020-05-06 21:56:31

在MySQL中查看表的索引列表及类型分类,核心方法是使用SHOW INDEX FROM table_name命令或查询information_schema.STATISTICS表。以下是具体操作和索引分类的详细说明:

一、查看索引列表的方法
  1. 使用SHOW INDEX命令执行以下命令可列出指定表的所有索引信息:

    SHOW INDEX FROM your_table_name;-- 或等效命令SHOW KEYS FROM your_table_name;

    关键输出列说明

    Table:索引所属表名。

    Non_unique:0表示唯一索引(含主键),1表示非唯一索引。

    Key_name:索引名称。

    Seq_in_index:列在复合索引中的位置(从1开始)。

    Column_name:索引包含的列名。

    Index_type:索引底层算法(如BTREE、HASH)。

    Cardinality:索引中不重复值的估计数量(值越高选择性越好)。

  2. 查询information_schema.STATISTICS表通过SQL查询获取更灵活的索引信息:

    SELECT TABLE_SCHEMA, TABLE_NAME, INDEX_NAME, NON_UNIQUE, SEQ_IN_INDEX, COLUMN_NAME, INDEX_TYPE, CARDINALITYFROM information_schema.STATISTICSWHERE TABLE_SCHEMA = 'your_database_name' AND TABLE_NAME = 'your_table_name';

    优势:支持过滤特定数据库、表名或索引类型,适合批量分析。

二、索引的分类与底层算法

索引分类需从逻辑功能物理实现两个维度理解:

  1. 逻辑功能分类

    主键索引(PRIMARY KEY)

    每表唯一,强制唯一性且不允许NULL值。

    InnoDB引擎下默认作为聚簇索引,数据按主键顺序物理存储。

    唯一索引(UNIQUE KEY)

    保证列值唯一,但允许NULL(多个NULL不冲突)。

    适用于需要唯一性的字段(如用户ID、邮箱)。

    普通索引(INDEX/KEY)

    无特殊限制,允许重复值和NULL,仅用于提升查询效率。

    全文索引(FULLTEXT INDEX)

    针对文本列(如VARCHAR、TEXT)优化,支持自然语言或布尔模式搜索。

    空间索引(SPATIAL INDEX)

    用于地理空间数据类型(如GEOMETRY),优化地理位置查询。

  2. 物理实现算法(通过Index_type列识别)

    BTREE

    默认索引类型,适用于全值匹配、范围查询、排序等场景。

    InnoDB和MyISAM引擎均支持,特点为数据有序,范围查询高效。

    HASH

    基于哈希表实现,仅支持精确匹配(等值查询),不支持范围查询或排序。

    InnoDB中通常为自适应哈希索引(由系统自动管理)。

    FULLTEXT

    全文索引的底层实现,专为文本搜索优化。

    SPATIAL

    空间索引的底层实现,为空间数据类型优化。

三、关注索引信息的意义
  1. 性能调优

    Cardinality:高值表示索引选择性高,查询效率可能更好;低值(如性别列)可能无效。

    Index_type:范围查询需BTREE,等值查询可评估HASH适用性(但需注意其局限性)。

  2. 排查慢查询

    结合EXPLAIN分析查询计划,确认是否命中索引及索引类型是否匹配查询模式。

    检查复合索引是否满足最左前缀原则(通过Seq_in_index列)。

  3. 数据库设计与维护

    验证设计合理性(如唯一性约束是否生效)。

    避免冗余索引:索引占用存储空间且增加写入开销,需定期审视优化。

四、其他相关查询
  • 查看外键关系:SELECT CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAMEFROM information_schema.KEY_COLUMN_USAGEWHERE TABLE_SCHEMA = 'your_database_name' AND TABLE_NAME = 'your_table_name' AND REFERENCED_TABLE_NAME IS NOT NULL;
  • 简略索引信息:DESCRIBE table_name;命令的Key列会标记PRI(主键)、UNI(唯一键)、MUL(非唯一索引),但信息较简略。

通过上述方法,可全面掌握MySQL表的索引结构,为性能优化、问题排查和数据库设计提供关键依据。