索引模块:

为什么要使用索引? 能够避免全表扫描,提升检索效率

什么的信息能够成为索引?主键,唯一键,具有区分性的

 索引的数据结构:

二叉查找树,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

数据库(第二天) 索引模块

索引是建立得越多越好吗

数据量小的表不需要建立索引,需要花更多时间和空间;

相关文章: