共计 961 个字符,预计需要花费 3 分钟才能阅读完成。
文章目录
- 1. 什么是索引?
- 2. 索引的优缺点
- 3. 索引结构
- 4. B-Tree(多路平衡查找树)
- 5. 经典 B +Tree
- 6. MySQL 索引数据结构中的 B +Tree
- 7. Hash
1. 什么是索引?
- 索引(index)是帮助 MySQL 高效获取数据 的数据结构 ( 有序)。
2. 索引的优缺点
- 优点:
提高检索效率 ,降低数据库 IO 成本;通过索引对数据进行排序, 降低数据排序成本,降低 CPU 的消耗。 - 缺点:
索引列 占用空间 ;索引在提高查询效率的同时也 降低了更新表的速度,在对数据表的 INSERT、UPDATE、DELETE 操作时,效率降低。
3. 索引结构
MySQL 索引在存储引擎层实现,不同的存储引擎有不同的结构。
有以下存储引擎:
- B+Tree 索引:最常见的索引类型,大部分引擎都支持 B+ 树索引。(平时说的索引,通常没有特别指明,都是 B+ 树索引)
- Hash 索引:底层数据结构是哈希表实现的,只有精确匹配索引列 的查询才有效,不支持范围查询。
- R-Tree(空间索引):MyISM 引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少。
- Full-text(全文索引):通过建立倒排索引,快速匹配文档的方式。类似于 Lucene,Solr,ES。
4. B-Tree(多路平衡查找树)
5. 经典 B +Tree
6. MySQL 索引数据结构中的 B +Tree
- MySQL 索引数据结构对经典的 B +Tree 进行了优化。在原 B +Tree 的基础上,增加了一个指向相邻叶子节点的链表指针,形成了带 有顺序的指针 的 B +Tree,提高区间访问的性能。
7. Hash
- 哈希索引就是采用一定的 Hash 算法,将键值换算成新的 hash 值,映射到对应的槽位上,然后存储在 hash 表中
- 如两个(或多个)键值,映射到同一个槽位上,就产生了 hash 冲突(hash 碰撞),可以通过 链表 来解决。
- Hash 索引只能用于对等比较 (=,in), 不支持范围查询(between,>,
- 无法 利用索引完成 排序操作
- 查询效率高,通常只需要一次检索就可以了,效率通常要高于 B +tree 索引(若发生 hash 碰撞则不一定)
- 存储引擎支持:在 MySQL 中,支持 hash 索引的是Memory 引擎,而innoDB 中具有自适应 hash 功能,hash 索引是存储引擎根据 B +Tree 索引在指定条件下自动构建的。
原文地址: 【MySQL 索引 | 第 1 篇】索引介绍以及索引的结构
正文完