一:局部性原理
空间局部性:程序和数据的访问都有成群访问的倾向,在有一个时间段内,仅适用其中的一部分。
时间局部性:最近访问的程序和数据,一段时间内又会被访问。
二: 索引是什么
1. 帮助mysql高效的获取数据
2. 索引存储在文件系统中
3. 索引的存储格式和存储引擎有关
4. 索引文件的数据结构:
hash
二叉树
B树
B+树
二叉树:
左边节点都小于根节点,右边节点都大于跟节点;缺陷:可能导致左右节点树高不平衡,查找效率变低。
红黑树(平衡二叉树):
1. 节点是红色或者黑色
2. 根节点是黑色
3. 每个叶子节点是黑色空节点
4. 每个红色的两个子节点是黑色。
5. 任意节点到子节点的黑色数目相同。
红黑树调整:变色和旋转
B树:M叉多路平衡树,B数父节点存储数据,B+树父节点不存储数据,值存储key(这样一个节点可以存户更多的key)。
InnoDB:
主键索引:叶子节点存的是实际值。
非主键索引:叶子节点存储的是主键ID,查找对应的主键ID,在跟进主键索引查找对应的记录行(两次B+树查询)。
两次B+树查询:
select * from table1 where name='zhangsan';
一次B+树查询:
select id form table1 where name='zhangsan';
MyIsam:
索引:叶子节点存储的是地址(因为索引文件和数据文件是分开存储的)。
三:索引的分类:
主键索引:值唯一,不能为空。
唯一索引:唯一值,值可以为空
普通索引:基本索引,没有唯一限制。
全文索引:全文索引类型是fulltext,可以再varchar、char、text上建索引。
组合索引:多列值组成一个索引、专门用于组合搜索(最左匹配原则)。
索引下推、谓词下推 ?(mysql 5.7)
覆盖索引:select字段、join字段、where 字段被索引字段全部覆盖。