此笔记为尚硅谷MySQL高级篇部分内容
目录
2.Simple Nested-Loop Join(简单嵌套循环连接)
3.Index Nested-Loop Join(索引嵌套循环连接)
4.Block Nested-Loop Join(块嵌套循环连接)
一、索引失效案例
1、全值匹配我最爱
意思是创建联合索引多个索引同时生效。
2、最佳左前缀法则
在MySQL建立联合索引时会遵守最佳左前缀匹配原则,即最左优先,在检索数据时从联合索引的最左边开始匹配。
如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。
3、主键插入顺序
4、计算、函数、类型转换(自动或手动)导致索引失效
5、类型转换导致索引失效
6、范围条件右边的列索引失效
7、不等于(!= 或者<>)索引失效
8、is null可以使用索引,is not null无法使用索引
9、like以通配符%开头索引失效
10、OR 前后存在非索引的列,索引失效
11、数据库和表的字符集统一使用utf8mb4
12、练习及一般性建议
练习:假设:index(a,b,c)
二、关联查询优化
1、采用左外连接
2、采用内连接
3、join语句原理
1.驱动表和被驱动表
2.Simple Nested-Loop Join(简单嵌套循环连接)
3.Index Nested-Loop Join(索引嵌套循环连接)
4.Block Nested-Loop Join(块嵌套循环连接)
5.Join小结
6.Hash Join
从MySQL的8.0.20版本开始将废弃BNLJ,因为从MySQL8.0.18版本开始就加入了hash join默认都会使用hash join
4、小结
三、子查询优化
四、排序优化
filesort算法:双路排序和单路排序
五、GROUP BY优化
六、优化分页查询
七、优先考虑覆盖索引
1、什么是覆盖索引?
2、覆盖索引的利弊
八、如何给字符串添加索引
1、前缀索引
2、前缀索引对覆盖索引的影响
九、索引下推 ICP
面试常问
1、索引条件下推使用前后
看个灵魂画图
2、ICP的开启/关闭
3、 ICP的使用条件
十、普通索引 vs 唯一索引
从性能的角度考虑,你选择唯一索引还是普通索引呢?选择的依据是什么呢?
1、查询过程
2、更新过程
3、change buffer的使用场景
十一、 其它查询优化策略
面试常问
1、EXISTS 和 IN 的区分
2、COUNT(*)与COUNT(具体字段)效率
3、关于SELECT(*)
4、LIMIT 1 对优化的影响
5、多使用COMMIT
十二、淘宝数据库,主键如何设计的?
面试中可能会问你主键如何设计,面试官主要看你的设计思想想法
1、自增ID的问题
2、业务字段做主键
为了能够唯一地标识一个会员的信息,需要为 会员信息表 设置一个主键。那么,怎么为这个表设置主键,才能达到我们理想的目标呢? 这里我们考虑业务字段做主键。
3、淘宝的主键设计
在淘宝的电商业务中,订单服务是一个核心业务。请问, 订单表的主键
淘宝是如何设计的呢?是自增ID吗?
打开淘宝,看一下订单信息:
4、推荐的主键设计
高级篇笔记PDF自取
链接:https://pan.baidu.com/s/1pVqrTwIZFoED77i-EFmw6g?pwd=3333
提取码:3333