网站忘记密码功能,批量制作图片的软件,html美食网页设计源码,网站建设合同中的违约责任索引的底层数据结构
MySQL中常用的是Hash索引和B树索引
Hash索引#xff1a;基于哈希表实现的#xff0c;查找速度非常快#xff0c;但是由于哈希表的特性#xff0c;不支持范围查找和排序#xff0c;在MySQL中支持的哈希索引是自适应的#xff0c;不能手动创建
B树的…索引的底层数据结构
MySQL中常用的是Hash索引和B树索引
Hash索引基于哈希表实现的查找速度非常快但是由于哈希表的特性不支持范围查找和排序在MySQL中支持的哈希索引是自适应的不能手动创建
B树的结构 B树 是一种高效的多路平衡树适合磁盘存储和范围查询。它的结构特点包括数据集中在叶子节点、叶子节点连接成链表、内部节点仅存储键值和指针。在数据库和文件系统中B树 被广泛应用于索引和数据存储具有查询性能稳定、适合高并发等优势。 如图B树具有以下特点
只有叶子结点才存放数据中间节点都是用来存放目录项作为索引
非叶子节点分为不同层次通过分层来降低每一层的搜索量
B树的搜索策略
从根节点开始通过二分法快速定位到符合页内范围包含查询值的页在中间结点中继续根据二分法来寻找符合页内范围复合查询值的页接着在叶子节点中通过槽查找记录使用二分法快速定位要查询的记录在哪个槽找到槽后再遍历槽中所有的记录找到寻找的分组。
为什么InnoDB使用B树而不是B树呢
B-Tree
每个节点既存储数据也存储子节点的指针数据分布在所有的节点中包括内部节点和叶子节点查找时可能会直接在内部节点中就能找到数据不需要遍历到叶子节点
BTree
只有叶子结点存储数据内部节点仅存储键值和子节点的指针所有叶子节点通过指针连接成一个有序链表查找时必须遍历到叶子节点才能获取数据
BTree的优势
更适合磁盘I/O
因为B树的内部节点不存储数据只存储键值和指针所以每个节点可以存储更多的键值从而降低树的高度树的高度越低磁盘I/O次数越少查询性能越高索引数据量很大一定是存储在磁盘中的每访问一个节点就会进行一次磁盘IO操作所以树的高度越低一次查询的期望IO次数就越少效率就越高B树的叶子节点通过指针连接成链表更适合范围查询如BETWEEN等操作而树的范围查询需要在不同层级的节点之间跳转效率较低
更适合数据库场景
数据集中在叶子节点上查询时都需要遍历到叶子节点这使得查询性能更稳定。B树的数据可能分布在内部节点和叶子结点查询性能不稳定 数据库查询中经常需要使用范围查询B树的叶子节点链表结构非常适合这种场景而B树需要多次遍历内部节点
更适合并发控制
在并发场景下B树的叶子节点链表可以更容易地支持范围查询和顺序访问而B树的结构在并发访问时可能需要更多的锁机制数据分布在内部节点和叶子节点。节点分裂与合并涉及多个节点。锁的粒度较大容易导致锁冲突
B树在InnoDB中的具体应用
主键索引聚簇索引 InnoDB使用B树实现主键索引叶子节点存储完整的数据行 这种设计是的通过主键查询数据时可以直接获取数据不需要回表
二级索引非聚簇索引 InnoDB的二级索引也是B树但是叶子节点存储的是主键值通过二级索引查询时先获取主键值再通过主键索引查找数据回表