MySQL发展

MySQL(一)中的B+Tree和引擎
正确创建合适索引,是提升数据库查询性能的基础
MySQL(一)中的B+Tree和引擎
通过快速检索101,找到磁盘位置,快速查询数据
MySQL(一)中的B+Tree和引擎
为什么MySQL选择了B+Tree

二叉树

通过二叉树查找(第一个插入的就是根节点)
MySQL(一)中的B+Tree和引擎

平衡二叉树

节点的子节点的高度差不超过1,红黑树就是一个平衡二叉树
一个节点就是一个磁盘块,每一个节点保存的数据是关键字,数据区(指向磁盘位置,加载数据),通过P1快速的找到5
MySQL(一)中的B+Tree和引擎
MySQL(一)中的B+Tree和引擎
下面是平衡二叉树的存放数据介绍
MySQL(一)中的B+Tree和引擎
上面这个高度超过了一,平衡二叉树会做一个旋转,保证树的平衡
MySQL(一)中的B+Tree和引擎下面是一个国外的网站,可以展示树的插入
MySQL(一)中的B+Tree和引擎

多路平衡查找树(B-Tree)

绝对平衡树,如何·保证绝对平衡,向上合并,保证绝对平衡
一个节点16K,我们一般用int类型id作为索引,能短则短,这个一个节点就可以有多个路
MySQL(一)中的B+Tree和引擎

B+Tree

支节点只保存关键字和引用,不保存数据,数据全部在叶子节点上
所以保存的关键字会比B-Tree的多
MySQL(一)中的B+Tree和引擎

为什么选用B+Tree?

MySQL(一)中的B+Tree和引擎
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200206164733386.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDE0OTkwMw==,size_16,color_FFFFFF,t_70MySQL(一)中的B+Tree和引擎

B+Tree索引在MySQL中体现

引擎InnoDB和Myisam

Myisam是数据和索引分别存储,InnoDB没有分开

frm是表定义文件,数据保存在MYD,索引保存在MYI
InnoDB数据和索引在ibd文件中
MySQL(一)中的B+Tree和引擎
MySQL(一)中的B+Tree和引擎
MySQL(一)中的B+Tree和引擎
InnoDB叶子节点中保存数据所有信息
MySQL(一)中的B+Tree和引擎
主键是最常用的数据条件,辅助索引叶子节点是主键索引,一旦数据发生迁移,无需修改辅助索引
InnoDB没有主键会创建一个隐式主键
MySQL(一)中的B+Tree和引擎

索引知识

列的离散性
离散性越高,选择性越好
最左匹配原则
联合索引
MySQL(一)中的B+Tree和引擎
覆盖索引,一旦命中覆盖索引,可以提高性能
MySQL(一)中的B+Tree和引擎
MySQL(一)中的B+Tree和引擎
对于like,和离散性有关,离散性差用不到索引
语句前面加explain select * from user;

存储引擎

每个表都可以指定存储引擎
无论什么存储引擎都会有frm表结构定义文件

CSV存储引擎,数据的快速导入导出,表格直接转换成csv文件(不介绍了)
Archive,数据存储ARZ文件,不支持事务,至只允许insert和select,应用日志系统 (不介绍了)
Memory存储引擎

面试可能会问Myisam和InnoDB的区别

Myisam是MySQL5.5之前默认的存储引擎
MySQL(一)中的B+Tree和引擎
而InnoDB支持行级锁,支持事务,主键索引方式进行数据存储,MVCC(多版本控制)
在5.5版本之后使用InnoDB引擎

相关文章: