mysql-B站视频

B站:https://www.bilibili.com/video/BV1aE41117sk?from=search&seid=1105170498701006939
数据结构特点网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

1.索引

在这里插入图片描述如果不加索引,就是一行行查找
把col2作为索引
假如用二叉树作为索引
二叉树节点里存放的是key-value
表的数据是放在磁盘的(索引也是)
key放索引字段、value放索引字段所在行的磁盘地址文件指针
在这里插入图片描述
找到了89这个key,取出89所在行的磁盘地址文件指针
这样再在磁盘上去找一次就可以啦

二叉树索引结构

不用二叉树,是因为单调情况性能低

红黑树(平衡二叉树)索引结构

不用红黑树,是因为数据量大时性能低

Hash索引结构

不用Hash表,是因为它不支持范围查找

2.B树索引结构

在这里插入图片描述

3.B+树索引结构

在这里插入图片描述

B与B+区别

1.B+树叶子结点比B树多了指针(适合范围查找)
2.B+树非叶子结点只存了索引,没有data数据(这样一个结点就可以存更多的索引)
3.B+树的叶子结点是存了所有结点,非叶子结点存储了冗余的索引

为什么不把所有结点放在一个叶子结点呢

加载的时候要把所有元素放到内存,耗时太久,浪费内存
在这里插入图片描述

h为3的B+树可存放2千万数据

B+树一个叶子结点是16KB
假如主键索引设为bigint,占8Byte
索引之间的空格是指针,指向下一个打的结点的磁盘文件的地址指针,占6B
在这里插入图片描述
16K/(8+6)=1170,所以一个结点可以存放1170个索引

不同的mysql存储引擎存放data的元素不一样,有的存放索引所在行的磁盘地址文件指针,有的存放索引所在行的其他所有字段
假设叶节点的索引+data占用1KB
则一个叶子结点存放16个索引元素

所以一个h为3的B+数最多可存放1170117016=2千多万

树的根节点一般放内存RAM里面
找到叶子结点,load两次,做两次磁盘I/O就可以找到了
速度就很快

4.MyISAM与InnoDB(形容数据库表)
MyISAM

select * from t where col1=49
1.col1是索引字段,就去MYI文件里
2.B+树中查找:先从内存取根节点,比对
3.load第二层的结点到内存,找到49
4.把它右边的指针对应的磁盘文件地址指针load,再比对
5.找到key49,对应的data为0x90,再去MYD中定位
在这里插入图片描述
!
frm:框架,是表结构定义的语句
MYD:data,数据
MYI:index,索引

InnoDB(聚集索引:索引和数据在一个文件)(支持行锁与事务)

mysql默认建立主键

用UUID不好:不方便比较,占用空间长
用整型自增好:B+树中每个节点从左到右是递增的
叶节点的指针,右边的>左边的
若不是递增的索引插入,B+树可能会分裂并调节平衡,性能开销大
所以用自增,永远在最后一个后面去加入节点

where col>20
先查找到20,先把20右边的30放入结果集,再顺着指针全部放入
在这里插入图片描述

在这里插入图片描述
frm:框架
ibd:index+data

联合索引(未完善)

在这里插入图片描述

第二个视频

https://www.bilibili.com/video/BV1ut41177j7?from=search&seid=7747381139812202031

innoDB(支持行锁与事务)

cpu才能用来做where条件中的比较

操作系统局部性原理
一次取一页 4KB放入内存

innoDB中
一次取一页 16KB

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值