当前位置: 代码网 > it编程>数据库>Mysql > MySQL主要使用的几种索引算法小结

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

2025年02月13日 Mysql 我要评论
在 mysql 中,索引是一种提高查询速度的数据结构。不同的索引算法适用于不同的查询场景,本文将详细介绍 mysql 的几种主要索引算法。1. b+tree 索引(默认索引)1.1 存储结构b+tre

在 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 局限性

❌ 不适用于高基数列(如手机号、用户名)❌ 不支持动态更新(更新代价大)

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 索引(适用大部分情况)。
  • 等值查询用 hash 索引,但 innodb 默认不支持(adaptive hash index 除外)。
  • 全文搜索用 full-text 索引,比 like '%xx%' 查询更快。
  • gis 查询用 r-tree 索引(spatial 索引)。
  • 低基数字段(如性别)可以考虑 bitmap 索引,但 mysql 不支持。

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

到此这篇关于mysql主要使用的几种索引算法小结的文章就介绍到这了,更多相关mysql 几种索引算法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com