开发者

MySQL主要使用的几种索引算法小结

开发者 https://www.devze.com 2025-03-27 11:09 出处:网络 作者: 阿离83
目录1. B+Tree 索引(默认索引)1.1 存储结构1.2 适用存储引擎1.URhaD3 优势1.4 局限性2. Hash 索引(适用于等值查询)2.1 存储结构2.2 适用存储引擎2.3 优势2.4 局限性3. Full-Text(全文索引)3.1 存储结构3.2 适用
目录
  • 1. B+Tree 索引(默认索引)
    • 1.1 存储结构
    • 1.2 适用存储引擎
    • 1.URhaD3 优势
    • 1.4 局限性
  • 2. Hash 索引(适用于等值查询)
    • 2.1 存储结构
    • 2.2 适用存储引擎
    • 2.3 优势
    • 2.4 局限性
  • 3. Full-Text(全文索引)
    • 3.1 存储结构
    • 3.2 适用存储引擎
    • 3.3 优势
    • 3.4 局限性
  • 4. R-Tree(空间索引)
    • 4.1 存储结构
    • 4.2 适用存储引擎
    • 4.3 优势
    • 4.4 局限性
  • 5. Bitmap 索引(适用于低基数列)
    • 5.1 存储结构
    • 5.2 适用存储引擎
    • 5.3 优势
    • 5.4 局限性
  • 6. 索引算法对比总结
    • 7. 结论

      在 mysql 中,索引是一种提高查询速度的数据结构。不同的索引算法适用于不同的查询场景,本文将详细介绍 MySQL 的几种主要索引算法。

      1. B+Tree 索引(默认索引)

      1.1 存储结构

      B+Tree(B+ 树)是一种平衡多路搜索树,其特点是:

      • 所有数据存储在叶子节点,内部节点仅存储索引值。
      • 叶子节点之间通过双向链表相连,便于范围查询。
      • 所有叶子节点在同一层,保持查询效率稳定。

      1.2 适用存储引擎

      • InnoDB(默认)
      • MyISAM

      1.3 优势

      ✅ 适用于 范围查询(BETWEEN、>、< 等)✅ 适用于 ORDER BY 排序查询✅ 叶子节点形成链表,支持 高效的顺序遍历

      1.4 局限性

      ❌ 不适用于全文搜索(需要使用 Full-Text 索引)

      ❌ 插入/删除频繁时可能导致索引 分 裂

      2. Hash 索引(适用于等值查询)

      2.1 存储结构

      • 通过 哈希函数 计算键值映射到哈希桶,快速定位数据。
      • 适用于 键值对查询(key-value)。

      2.2 适用存储引擎

      • Memory(Heap)引擎
      • InnoDB(Adaptive Hash Index,自动优化的哈希索引)

      2.3 优势

      ✅ 适用于 等值查询(=),查询速度快(O(1) 时间复杂度)

      ✅ 哈希表查询不会随数据量增加而变慢

      2.4 局限性

      ❌ 不支持范围查询(>、<、BETWEEN)❌ 不支持 ORDER BY 排序❌ 容易哈希冲突,影响查询效率

      3. Full-Text(全文索引)

      3.1 存储结构

      • 倒排索引(Inverted Index),存储单词 -> 文档 ID 的映射。
      • 适用于 全文搜索(如文章、评论、日志)。

      3.2 适用存储引擎

      • InnoDB
      • MyISAM

      3.3 优势

      ✅ 适用于 全文搜索(MATCH() AGAINST())✅ 比 LIKE '%xx%' 查询快得多

      3.4 局限性

      ❌ 不适用于小数据量(索引维护开销大)❌ 不能完全替代搜索引擎(如 Elasticsearch)

      4. R-Tree(空间索引)

      4.1 存储结构

      • R-Tree(多维索引结构),适用于存储和查询 地理坐标(点、矩形、多边形)。

      4.2 适用存储引擎

      • MyISAM
      • InnoDB(MySQL 8.0 之后支持 SPATIAL 索引)

      4.3 优势

      ✅ 适用于 地理信息查询(如“某点附近的餐馆”)✅ 适用于 空间范围查询(如“某个区域内的所有数据”)

      4.4 局限性

      ❌ 仅 MyISAM 支持,InnoDB 仅在 MySQL 8.0+ 支持

      ❌ 适用场景较窄,一般用于 GIS 应用

      5. Bitmap 索引(适用于低基数列)

      5.1 存储结构

      • 位图(Bitmap),用 0/1 位 记录某个值在不同数据行中的出现情况。

      5.2 适用存储引擎

      • MySQL 不直接支持(oracle、PostgreSQL 支持)

      5.3 优势

      ✅ 适用于 低基数列(如性别、状态、布尔值)✅ 节省存储空间,查询时可用位运算加速

      5.4 局限性

      http://www.devze.com 不适用于高基数列(如手机号、用户名)❌ 不支持动态更新(更新代价大)

      6. 索引算法对比总结

      索引类型适用存储引擎适用查询场景优势局限性
      B+Tree(默认)InnoDB、MyISAM范围查询、排序查询、主键/外键适用于大多数场景插入/删除频繁时可能导致索引分裂
      Hash 索引Memory、InnoDB(自适应)精确匹配(=)查询速度快(O(1))不支持范围查询、排序、模糊查询
      Full-Text 索引InnoDB、MyISAM全文搜索适用于大文本字段(如文章搜索)不能完全替代搜索引擎
      R-Tree(空间索引)MyISAM、InnoDB(8.0+)GIS 地理查询适用于空间数据仅适用于 MyISAM(8.0+ InnoDB 支持)
      Bitmap 索引MySQL 不支持低基数列(如性别)编程客栈高效存储和查询更新代价高,不适用于高基数列

      7. 结论

      • 默认使用 B+Tree 索引(适用javascript大部分情况)。
      • 等值查询用 Hash 索引,但 InnoDB 默认不支持(Adaptive Hash Index 除外)。
      • 全文搜索用 Full-Text 索引,比 LIKE '%xx%' 查询更快。
      • GIS 查询用 R-Tree 索引http://www.devze.comSPATIAL 索引)。
      • 低基数字段(如性别)可以考虑 Bitmap 索引,但 MySQL 不支持。

      选择合适的索引结构,可以极大提升 MySQL 查询性能!

      到此这篇关于MySQL主要使用的几种索引算法小结的文章就介绍到这了,更多相关MySQL 几种索引算法内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号