2020-05-06 21:56:31
在MySQL中查看表的索引列表及类型分类,核心方法是使用SHOW INDEX FROM table_name命令或查询information_schema.STATISTICS表。以下是具体操作和索引分类的详细说明:
一、查看索引列表的方法使用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:索引中不重复值的估计数量(值越高选择性越好)。
查询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';优势:支持过滤特定数据库、表名或索引类型,适合批量分析。
索引分类需从逻辑功能和物理实现两个维度理解:
逻辑功能分类
主键索引(PRIMARY KEY)
每表唯一,强制唯一性且不允许NULL值。
InnoDB引擎下默认作为聚簇索引,数据按主键顺序物理存储。
唯一索引(UNIQUE KEY)
保证列值唯一,但允许NULL(多个NULL不冲突)。
适用于需要唯一性的字段(如用户ID、邮箱)。
普通索引(INDEX/KEY)
无特殊限制,允许重复值和NULL,仅用于提升查询效率。
全文索引(FULLTEXT INDEX)
针对文本列(如VARCHAR、TEXT)优化,支持自然语言或布尔模式搜索。
空间索引(SPATIAL INDEX)
用于地理空间数据类型(如GEOMETRY),优化地理位置查询。
物理实现算法(通过Index_type列识别)
BTREE
默认索引类型,适用于全值匹配、范围查询、排序等场景。
InnoDB和MyISAM引擎均支持,特点为数据有序,范围查询高效。
HASH
基于哈希表实现,仅支持精确匹配(等值查询),不支持范围查询或排序。
InnoDB中通常为自适应哈希索引(由系统自动管理)。
FULLTEXT
全文索引的底层实现,专为文本搜索优化。
SPATIAL
空间索引的底层实现,为空间数据类型优化。
性能调优
Cardinality:高值表示索引选择性高,查询效率可能更好;低值(如性别列)可能无效。
Index_type:范围查询需BTREE,等值查询可评估HASH适用性(但需注意其局限性)。
排查慢查询
结合EXPLAIN分析查询计划,确认是否命中索引及索引类型是否匹配查询模式。
检查复合索引是否满足最左前缀原则(通过Seq_in_index列)。
数据库设计与维护
验证设计合理性(如唯一性约束是否生效)。
避免冗余索引:索引占用存储空间且增加写入开销,需定期审视优化。
通过上述方法,可全面掌握MySQL表的索引结构,为性能优化、问题排查和数据库设计提供关键依据。