mysql索引存储及优化

具体的sql优化和索引优化 写在这边文章中:
sql优化地址

索引主要作用:高效获取数据
那么它是如何达到高效的获取数据呢?可以先从它的数据存储结构开始说起。

主要以innoDB引擎的B+Tree 进行说明

无索引:
先说一个没有索引的数据表结构

col1ool2
1苹果
2梨子
3西瓜
4香蕉
5西红柿

假设该表结构没有索引进行搜索 col1 = 5
那么自然而然 先按照顺序 1 、2、3、4、5进行搜索判断,直到把所有匹配5的值找出来。
这也就是全表检索了,在数据量较大的时候,速度是非常慢的。

二叉树:

那么这里假设索引 引入一个二叉树试试看

在这里插入图片描述
上图就是二叉树进行的索引值存储

这个是在线模拟二叉树生成的工具

二叉树特性:

  1. 所有节点最多拥有两个子节点,即度不大于2
  2. 左子树的键值小于根的键值,右子树的键值大于根的键值

通过上图可以得出 如果需要查处col1 = 5,那么依次进行判断只需要三次 3 、4、5
然后再通过指针找出对应行的所处数据。
这种方式就不再是全表检索了。

字符的方式也一样:
在这里插入图片描述

字符的方式 比如因为或汉子
都会按照ASCII码进行大小判断

B+Tree

在这里插入图片描述

上图是一个 5叉B+Tree

id是 1到15

B+Tree规则:

1.B+跟B树不同B+树的非叶子节点不保存关键字记录的指针,只进行数据索引,这样使得B+树每个非叶子节点所能保存的关键字大大增加;
2.B+树叶子节点保存了父节点的所有关键字记录的指针,所有数据地址必须要到叶子节点才能获取到。所以每次数据查询的次数都一样
3.B+Tree假设是M叉,那么key就是M-1
通过B+树的方式,在大量数据面前,可以快速的找到对应的键,从而通过指针获取到对应的值.
不过索引本身也需要存储空间,以及在执行改动数据的时候.索引也会需要时间来变动,可以根据以往的经验来创建索引.

聚集索引:

  1. 介绍:聚集索引指的是叶子结点下存储的数据就是行数据,默认 主键或者唯一索引,当没有一条列可以保证唯一性时,则会新增一条隐藏列当作聚集索引。通过聚集索引的叶子结点找到行数据是非常快的,因为索引和数据都在同一个文件,不需要额外的IO.
  2. 非聚集索引最后的叶子结点存储的则是主键id,再通过主键id查找到对应数据.

结尾:

  1. 索引快的原因在于不需要全局匹对,只需要按照范围进行计算,获取出对应值的地址,再根据地址获取行数据
  2. 节点的范围计算是由内存进行的所以效率会非常的快,又由于使用的结构是B+树,所以到叶子节点的次数也不会特别多.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值