JR2-数据库Mysql与Redis

一、索引的本质及实现

索引是帮助MySQL搞笑获取数据的排好序的数据结构
索引的本质
索引用的:Btree提升查找效率
如果使用二叉树:
在这里插入图片描述
如果使用红黑树(自动平衡):
在这里插入图片描述
B树结构
在这里插入图片描述
MySQL索引存储结构:B+树(多叉/路平衡树)
在这里插入图片描述
B+树存储及查找过程
在这里插入图片描述
通过降低树的高度减少磁盘IO速度,那么为何不把所有数据放在一行,只做一次IO?答:这么操作的话会把所有数据加载到内存中,百万行的数据再内存中就要有几个G
输入下图sql语句可查询B+树的一个节点的存储大小,大约16KB
在这里插入图片描述
那么为什么16KB?
例如唯一索引bigInt =8B,非叶子节点6B.16KB/8+6B大约等于1170个索引
如果树的高度为3,那么所有叶子节点全部放满的情况下就是1170x1170x16=21902400,大概2100万的数据。

二、常用存储引擎索引实现

在这里插入图片描述
在这里插入图片描述
区别:数据与索引存储位置不一样
为什么InnoDB表必须有主键,并且推荐使用整型的自增主键?
1、底层设计必须要有索引,使用B+树索引存储数据。默认底层遍历所有唯一的一列来做索引,都重复的情况下建立隐藏列来维护整张表的数据索引。
2、使用整型索引之间数据比较大小更快,并且整型占的存储空间小,节省空间
3、为什么自增?叶子节点从左到右增大,使用uuid还要进行大量计算
为什么非主键索引结构叶子节点存储的是主键值?
一致性和节省存储空间

三、索引最左前缀原理

联合索引结构是什么样?
在这里插入图片描述
(a,b,c)按建索引的顺序比较大小,先按a比较大小,再b,然后c.中间有查到就不再往下比较。
最左前缀法则:
在这里插入图片描述
其中第3条语句会走索引,因为根据索引的结构,按name ,age,position建立。排除name其他索引节点是无序的需要遍历全表索引,引起全文查找。

四、Redis核心数据结构介绍

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
redis有个非常大的忌讳:bigKey,因为单线程,请求排队,如果一个请求的key和value非常大,会阻塞后面的请求,大数据可以分段存取。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Hash结构再集群模式下使用中的问题:偏移。redis节点会发生变化
在这里插入图片描述
可以用redis list结构四线栈,队列,阻塞队列。
在这里插入图片描述
单机redis的qps是十万
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
重点:用户关注模型
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值