索引模块:
为什么要使用索引?
能够避免全表扫描,提升检索效率
什么的信息能够成为索引?
主键,唯一键,具有区分性的
主键和唯一键的区别 :
- 唯一性:是,是
- 能够为空:否,可
- 主键一个表至多一个,唯一键可以有多个
- 允许组合,类似(a,b)坐标,不能重复
外键:
- 要求在从表设置外键关系
- 从表的外键列的外键列类型与主表的关联列的类型要求一致或者兼容,名称无要求
- 主表的关联列必须是一个key(一般是主键或者唯一键)
- 插入数据时,先插主表再插从表
- 删除数据时,先删从表再删主表
索引的数据结构:
二叉查找树,B-Tree,B+-Tree,Hash
二叉查找树:按照大小按左中右排序,左子树和右子树高度差不大于1;
时间复杂度为 O(logN)
B-Tree:根节点至少包括两个孩子,树中每个节点最多含有m个孩子(m>=2),除根节点和叶节点,其他每个节点至少拥有Ceil(m/2)个孩子,所有叶节点都在同一层
B+-Tree是B树的变体,其定义基本与B树相同,除了:
1.非叶子节点的子树指针与关键字个数相同
2.非叶子节点的子树指针P[i],指向关键字值[K[i],K[i+1])的子树
3.非叶子节点仅用来索引,数据都保存在叶子节点中
4.所有叶子节点均有一个链指针指向下一个叶子结点
B+树更适合用来做存储索引:
1.磁盘读写代价更低
2.查询效率更加稳定
3.更有利于对数据库的扫描
索引模块:
密集索引和稀疏索引的区别:
密集索引文件中的每个搜索码值都对应一个索引值
稀疏索引文件只为索引码的某些值建立索引项(相当于分块了)
Innodb :
密集索引,就是通过主索引直接检索即可;
稀疏索引,利用辅助键获取主键信息,再去访问主键索引,获得我们想要的数据
如何定位并优化慢查询Sql
联合索引的最左匹配原则的成因
索引是建立得越多越好吗
慢查询优化:
根据慢日志定位慢查询sql
使用explain等工具分析sql
修改sql或者尽量让sql走索引
联合索引的最左匹配原则的成因
最左匹配原则:
https://blog.csdn.net/sinat_41917109/article/details/88944290
索引是建立得越多越好吗
数据量小的表不需要建立索引,需要花更多时间和空间;