首页 >> 基础教程

mysql索引分类

MySQL索引可以从数据结构、物理存储和逻辑功能三个维度进行分类。以下是详细的分类说明:

一、按数据结构分类(核心分类)

  1. B+Tree索引

  2. 适用引擎:InnoDB、MyISAM(默认索引类型)

  3. 特点:

  4. 多路平衡搜索树,支持高效的范围查询(><BETWEEN)和排序(ORDER BY)。

  5. 所有数据存储在叶子节点,非叶子节点只存键值(减少I/O)。

  6. 叶子节点通过指针形成链表,便于顺序扫描。

  7. CREATE INDEX idx_name ON users(name);
    
  8. Hash索引

  9. 适用引擎:Memory引擎(InnoDB支持自适应哈希索引,但用户无法显式创建)。

  10. 特点:

  11. 基于哈希表实现,仅支持精确等值查询(=IN)。

  12. 不支持范围查询或排序(哈希值无序)。

  13. 查询复杂度接近O(1),但哈希冲突会影响性能。

  14. CREATE TABLE memory_table (...) ENGINE=MEMORY;
    
  15. Full-Text索引(全文索引)

  16. 适用引擎:InnoDB(≥5.6)、MyISAM

  17. 特点:

  18. 用于全文搜索(MATCH AGAINST),支持关键词检索。

  19. 底层使用倒排索引(Inverted Index)结构。

  20. CREATE FULLTEXT INDEX idx_content ON articles(content);
    
  21. R-Tree索引(空间索引)

  22. 适用引擎:MyISAM(InnoDB≥5.7支持)

  23. 特点:

  24. 用于地理空间数据(GEOMETRY类型),支持GIS查询(如ST_Contains())。

  25. CREATE SPATIAL INDEX idx_location ON maps(coordinates);
    

二、按物理存储分类(InnoDB特有)

  1. 聚簇索引(Clustered Index)

  2. 特点:

  3. 数据行物理存储顺序与索引键值顺序一致(索引即数据文件)。

  4. 一个表只能有一个聚簇索引(通常为主键)。

  5. 范围查询效率高(相邻数据物理连续)。

  6. 生成规则:

  7. 若定义了主键,则主键为聚簇索引。

  8. 若无主键,则选第一个UNIQUE NOT NULL列。

  9. 两者皆无,则隐式生成6字节ROWID作为聚簇索引

  10. 非聚簇索引(Secondary Index / 辅助索引)

  11. 特点:

  12. 索引节点仅存储索引列值 + 主键值(非数据行物理地址)。

  13. 查询非索引列时需回表(通过主键值到聚簇索引中查找数据)。

三、按逻辑功能分类

  1. 主键索引(PRIMARY KEY)

  2. 特点:

  3. 唯一且非空,表只能有一个主键索引(即聚簇索引)。

  4. 自动创建聚簇索引(InnoDB)。

  5. ALTER TABLE users ADD PRIMARY KEY (id);
    
  6. 唯一索引(UNIQUE)

  7. 特点:

  8. 索引列值必须唯一(允许NULL,但NULL可重复)。

  9. 避免数据重复,非聚簇索引(除非被用作聚簇索引)。

  10. CREATE UNIQUE INDEX idx_email ON users(email);
    
  11. 普通索引(INDEX / KEY)

  12. 特点:

  13. 无唯一性约束,仅加速查询。

  14. 最基础的B+Tree索引类型。

  15. CREATE INDEX idx_age ON users(age);
    
  16. 联合索引(Composite Index)

  17. 特点:

  18. 基于多个列创建的索引(最多16列)。

  19. 遵循最左前缀原则(查询条件需包含最左列)。

  20. CREATE INDEX idx_name_age ON users(name, age);
    -- 有效查询: WHERE name='Alice' / WHERE name='Alice' AND age=30
    -- 无效查询: WHERE age=30(跳过最左列name)
    
  21. 前缀索引(Prefix Index)

  22. 特点:

  23. 对文本列前N个字符创建索引(节约空间)。

  24. 牺牲部分选择性(可能增加冲突)。

  25. CREATE INDEX idx_city_prefix ON users(city(10)); 
    -- 仅索引前10字
    

四、其他特殊索引

  1. 覆盖索引(Covering Index)

  2. 逻辑概念:索引包含查询所需的所有列,避免回表。

  3. 自适应哈希索引(Adaptive Hash Index)

  4. InnoDB自动创建:对频繁访问的索引页动态构建哈希索引(加速等值查询)。

所有评论

最新文章
20.5 性能优化建议2026-05-08
20.4 复杂查询实现2026-05-08
20.3 表创建与数据初始化2026-05-08
20.2 数据库设计2026-05-08
20.1 项目需求分析:博客系统2026-05-08
19.4 自动化备份策略2026-05-08
19.3 导出和导入数据2026-05-08
19.2 恢复备份数据2026-05-05
19.1 使用mysqldump备份数据2026-05-05
18.4 实战:开发简单的学生管理系统2026-05-05
关于我 备案号:蜀ICP备2023042032号-1