MsSql

关注公众号 jb51net

关闭
首页 > 数据库 > MsSql > MySQL索引

四大核心维度带你系统梳理MySQL索引的分类逻辑

作者:大黄评测

在数据库开发与优化中,MySQL 索引是绕不开的核心话题,本文将从四大核心维度系统梳理 MySQL 索引的分类逻辑,帮助你快速构建清晰认知框架

在数据库开发与优化中,MySQL 索引是绕不开的核心话题。很多开发者面对“慢查询”束手无策,其实问题根源往往就在于索引没建对、没用好。本文将从四大核心维度系统梳理 MySQL 索引的分类逻辑,帮助你快速构建清晰认知框架,真正做到“知其然,更知其所以然”,让查询优化少走 90% 的弯路。

一、按功能特性分类(最贴近业务开发)

这是开发者日常接触最多的分类方式,直接决定你该为哪些字段建哪种索引。

1. 主键索引(Primary Key Index)

特点:唯一、非空、每表仅一个;自动创建聚簇索引(InnoDB)。

作用:唯一标识每一行记录。

示例

CREATE TABLE user (
  id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(50),
  PRIMARY KEY (id)
);

2. 唯一索引(Unique Index)

特点:值唯一(允许多个 NULL),可多个;用于业务唯一性约束。

适用场景:手机号、邮箱等需去重但非主键的字段。

示例

CREATE UNIQUE INDEX idx_user_phone ON user(phone);

3. 普通索引(Normal/Index)

特点:无约束,仅加速查询;最常用。

适用场景:经常出现在 WHERE、JOIN、ORDER BY 中的字段。

示例

CREATE INDEX idx_user_name ON user(name);

4. 全文索引(Full-Text Index)

特点:支持 MATCH ... AGAINST 全文检索;适用于 CHAR/VARCHAR/TEXT

注意LIKE '%关键词%' 无法使用 B+Tree 索引,此时全文索引是唯一解。

示例

CREATE FULLTEXT INDEX idx_article_content ON article(content);

5. 组合索引(Composite / 联合索引)

特点:多个字段组成一个索引;遵循最左前缀原则

优势:减少索引数量,提升多条件查询效率。

示例

CREATE INDEX idx_user_age_name ON user(age, name);
-- 可加速 WHERE age=25 AND name='张三'
-- 也可加速 WHERE age=25(但不能加速仅 WHERE name='张三')

二、按底层数据结构分类(决定性能本质)

索引的本质是数据结构,不同结构适合不同查询模式。

1. B+Tree 索引(默认且最主流)

引擎支持:InnoDB、MyISAM 默认使用。

优势

适用场景:90% 以上的业务查询。

2. Hash 索引

引擎限制:Memory 引擎原生支持;InnoDB 有自适应 Hash 索引(不可手动创建)。

优势:等值查询(=IN)极快,O(1) 时间复杂度。

劣势

适用场景:内存表中的精确匹配高频查询。

3. 空间索引(R-Tree)

4. 全文索引(倒排索引结构)

三、按物理存储方式分类(影响 I/O 效率)

1. 聚簇索引(Clustered Index)

2. 非聚簇索引(Secondary Index / 二级索引)

四、按字段数量分类(设计索引时的关键考量)

类型说明注意事项
单列索引仅包含一个字段简单直接,但可能冗余
组合索引包含 2~16 个字段(InnoDB 最多 16 列)遵循最左前缀,合理排序字段顺序可大幅提升复用率

最佳实践:将区分度高查询频率高的字段放组合索引左侧。

总结:如何科学建索引?

到此这篇关于四大核心维度带你系统梳理MySQL索引的分类逻辑的文章就介绍到这了,更多相关MySQL索引内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文