1进阶-课程介绍

2存储引擎-MySQL体系结构


问题:
1服务层是干嘛的?

2引擎层是干嘛的?

3引擎层和存储层有什么区别?

3存储引擎-简介


4InnoDB简介


问题:
什么是行级别锁?为什么可以提高并发性能?

5MyISAM和Memory


问题:
这三个存储引擎的区别?

6存储引擎的选择

7小结

8MYSQL安装(Linux版本)
08. 进阶-MySQL安装(linux版本)_哔哩哔哩_bilibili
9索引



10索引-结构



11Btree


问题:
Btree树是怎么裂变的?
超过要求之后向上分裂

12B+tree

问题:
B+tree和Btree树的区别?
所有元素都只会出现在叶子节点


13hash



14思考题


15分类





问题:
1聚集索引和二级索引区别?
主要看叶子节点挂载的区别,聚集挂载的是这一行的数据, 二级挂载的是id
2什么是回表查询?
是查询语句现在二级索引的叶子节点处找到id值,然后拿着这个id值去聚集索引里面查询这个行数据就叫回表查询
16思考题


这里面的n表示key数量,(n+1)表示指针数量
17语法



问题:
什么是联合索引?
联合索引 (也叫复合索引 )是数据库中基于多个字段组合创建的索引,而非单一字段。它可以理解为把多个字段的值按顺序拼接后生成的索引结构,用于加速多字段组合条件的查询。

18性能分析-查看执行频次

问题:
global和session有什么区别?

19慢查询日志


问题:
慢查询日志配置在哪里?以及配置什么参数?




20show-profiles


问题:
怎么看profile是开启还是关闭的?
命令: select @@profiling
21explain



问题:
1图一表格每一列代表什么意思?
上面两张图片有介绍
2explain和desc的区别?

22使用规则-验证索引效率


命令后面加\G可以行展示
23最左前缀法则

注意:
这个只关心存在不存在,与索引条件放的位置(顺序)没关系

问题:
那这个该怎么规避?
使用>=或者<=
24索引失效情况一



25索引失效情况二


26SQL提示

问题:
1use index放在语句哪里?
放在from后面
2怎么查看表中有哪些索引?

27覆盖索引&回表查询


问题:
回答上面第二张图片问题?
设计username和password的聚集索引,这样他们的叶子节点存储的就是id值,这样也不会回表查询,效率最高
28前缀索引

其实就是根据第一个select来选择,使用二进制的几次方即可
29单列&联合索引


30设计原则

问题:
是否心中有数?
31索引小结


32SQL优化-插入数据



问题:
1大批量插入数据不理解其步骤及命令操作?



2主键顺序插入为什么性能高于乱序插入?
下一节详细讲解
33主键优化





问题:
1都有什么空间,大小?
表区间,段,区,页,行
2主键设计原则(怎么优化)?
尽量降低主键长度,顺序插入(auto_increment自增主键),尽量不要使用uuid或者其他自然主键,避免对主键的修改
34order by优化



35group by优化

36limit优化


问题:
什么是覆盖索引?
子查询select id from tb_sku order by id limit 2000000,10中,id是主键(默认会有主键索引),而查询字段只有id,此时主键索引就是覆盖索引(因为索引本身包含了查询所需的所有字段)。
37count优化



38update优化(避免行锁升级为表锁)

问题:
update是怎么优化的?
where条件必须是有索引的,并且不能失效
39优化-小结

问题
SQL优化绝大部分都是根据索引进行优化的
40视图-介绍及基本情况


问题:
1可选项[WITH]那里是什么?
下节课讲
2视图的作用是什么?为什么要用视图?

41检查选项(cascaded)
with cascaded check option(级联(向下看))
with local check option

关键:
视图不存储数据,当使用insert时,会将数据存储在视图绑定的表中
另外如果不用with的话where的条件是不做检查的
42检查选项(local)
只看自己本层的条件
43更新及作用


关键
视图中的行必须与表中的商之间存在一对一的关系,就是select不能有上述的函数
44视图-案例



45存储过程-介绍


46基本语法



47变量-系统变量


48用户定义变量


49局部变量



50if判断

51参数(IN,OUT,INOUT)





52case



问题:
if和case的 格式的区别?
if then vs case when then
esleif else
else
end if end case
53循环-while



54循环-repeat



55循环-loop




56游标-cursor



问题:
1游标是解决什么问题的?
解决在存储过程中定义的局部变量只能接收单行单列的问题
2最后一个是null会报错或者插入的问题怎么解决?
下节课会讲
57条件处理程序-handler

问题:
下面图中代码执行流程?

设置一个条件处理程序,当'SQLSTATE'='02000'(这个表示为空(可以替换为not found))时就执行exit退出,在这之前先关闭游标
58 存储函数



问题:
必须加[characteristic]中的三个其中一个
另外,存储函数用的少,因为存储过程可以替代(包含他(inout))他
存储过程和存储函数的区别?
形参不一样; in num int vs num int

59触发器-介绍

问题:
1理解old和new在各种触发器类型中的含义
2什么是行级触发,什么是语句级触发?
举例;执行update语句,影响了5行,update类型触发器执行了5次那就是行级触发器,不管影响了几行都是执行一次触发器,那就是句触发器
60案例1-(insert类型)



61案例2-(update类型)

62案例3-(delete类型)

63视图&存储过程&触发器-小结

问题:
触发器和存储函数的区别?

64锁-介绍




65全局锁

66全局锁-一致性数据备份
