Mysql索引以及底层原理

索引的优缺点:
索引是创建在表上,是对数据库表中一列或多列的值进行排序的一个结果。索引的核心是提高查询的速度。
优点:提高查询效率。
缺点索引并非越多越好,过多的索引会使CPU的使用率居高不下,由于数据的改动会造成索引文件的改动,过多的I/O操作造成CPU负荷太重。
索引的创建和删除:
创建表的时候指定索引字段:

CREATE TABLE index1(id INT,
name VARCHAR(20),
sex ENUM(‘male’, ‘female’),
INDEX(id));

在表上添加索引:
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名
ON 表名 (属性名 [ASC | DESC]);
删除索引:
DROP INDEX 索引名 ON 表名;
索引的底层实现原理
Mysqll支持两种索引,一种是B-树索引,还有一种是哈希索引。
这里主要讨论InnoDB存储引擎支持的B-树索引(Mysql实际支持的是B+树索引)。
B-树是m阶平衡树,叶子节点都在同一层,每个节点存储的数据量比较大,所以整个B-树的层数是非常低的,基本不超过三层。
由于磁盘的读取是按block块操作的(内存是按page页面操作的),因此B-树节点大小一般和磁盘块大小一致,这样一个B-数节点,就可以通过一次I/O操作将磁盘块一次全部存储下来,所以使用B-数索引时,磁盘I/O的次数是最少的MySQL的读写效率,主要集中在磁盘I/O上)。
那么MySQL最终为什么要采用B+树存储索引结构呢,那么看看B-树和B+树在存储结构上有什么不同
1.B-树的每个节点存了关键字和对应的数据地址,而B+树的非叶子节点只存关键字,因此B+的每个非叶子节点存储的关键字是远远多于B-树的。因此从树的高度来说吗,B+树的高度是低于B-树的,使用磁盘I/O次数少,查询更快。
2.B-树的每个节点都存关键字和数据地址,因此离根近的节点查询就快,离根远的查询的慢。B+树所有数据都存在叶子节点上,因此在B+树上搜索关键字,找到对应关键字的时间是平均的。没有快慢之分。
3.在B-树上做区间查找,遍历的节点是非常多的;B+树的所有叶子节点被连成双向链表,因此做整张表遍历和区间查找是非常容易的。
B-树的结构如下:
在这里插入图片描述
B+树的结构如下:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值