基础知识储备
IO读取方式:顺序读写 和 随机读写
顺序读写:速度比较快,局部性原理:发现程序和数据的访问都有聚集成群的倾向,在一个时间段内,仅使用其中一小部分(空间局部性),或者最近访问过的程序代码和数据,很快又被访问的可能性很大(时间局部性)。
磁盘预读(预读的长度一般为页(page)的整数倍)
页是存储器的逻辑块,操作系统往往将主存和磁盘存储区分割为连续的大小相等的块,每一个存储块称为一页(页大小通常为4k), 主存和磁盘以页为单位交换数据
索引是什么?
索引是帮助Mysql高效获取数据的数据结构
索引存储在文件系统中
索引的文件存储形式与存储引擎有关
索引文件的结构:
hash:数组加链表的数据结构。
缺点:1、利用hash存储的话需要将所有的数据文件添加到内存,比较消耗内存空间
2、等值查询速度快,但是范围查找用不了
二叉树、红黑树:
缺点:都会因为树的深度过深而造成IO次数变多,影响数据读取的效率
B树:
特点:
1、所有的键值分布在整颗树中
2、搜索有可能在非叶子节点结束,在关键字全集内做一次查找,性能逼近二分查找
3、每个节点最多拥有m个子树
4、根节点至少有两个子树
5、分支节点至少拥有m/2颗子树
6、所有叶子节点都在同一层,每个节点最多可以有m-1个key,并且以升序排列
缺点:
每一个磁盘块的空间是有限制的,比如是4K,这个时候,有可能因为data的数据很大,而导致树的深度加深
B+树
三次IO就可以取到值
InnoDB
索引的分类
mysql索引的五种类型:主键索引、唯一索引、普通索引和全文索引、组合索引
主键索引:主键是一种唯一性索引,但它必须指定为PRIMARY KEY,每个表只能有一个主键
唯一索引:索引列的所有值都只可能出现一次,即必须唯一,值可以为空
普通索引:基本的索引类型,值可以为空,没有唯一性的限制、
MySQL的存储引擎
这三行知识,必须得说得出来
聚簇索引:Innodb 的数据文件只有一个,索引和数据放在一个文件
非聚簇索引:MyLSAM的索引分为两个文件,索引和数据是分开的