(笔记来源
https://www.bilibili.com/video/BV1Kr4y1i7ru?p=88&vd_source=3cf72bb393b8cc11b96c6d4bfbcbd890)
3.索引
3.1索引的语法
3.1索引的性能分析
3.1.1查看SQL执行频率
增删改为主的SQL的一般不需要优化
查询居多的SQL则需要优化
3.1.2慢查询的日志
记录了超过x秒的查询语句,x是自己配置的
3.1.3profile详情
如何定位其他的需要优化的语句
3.1.4 explain执行计划(相对来说比较常用和重点)
字段说明
3.2 索引的使用原则
(视频会更直观 https://www.bilibili.com/video/BV1Kr4y1i7ru?p=80&vd_source=3cf72bb393b8cc11b96c6d4bfbcbd890)
上面的原则是对联合索引起作用的(多个列组合成的索引)
上面最好用(>= 或者<=),带上= 具体看视频
3.3索引失效的情况
对索引字段进行运算会造成索引失效
索引字段类型转换 会对索引失效
模糊查询,如果是尾部模糊查询,索引不会失效,头部模糊查询,索引失效
or连接的条件
数据分布的影响
比如建立了索引,但是却没有走看explain语句,没有走索引. 如下图的sql,这张表几乎都符合这个条件,那还不如直接扫描全表,比不走索引更快.
同理,is null 和 is not null 也是一样的道理,is null 和 is not null 哪个条件匹配的结果 几乎等于扫描全表,那么就是直接扫描全表不走索引更快.
(说的不是很清楚 可以看视频https://www.bilibili.com/video/BV1Kr4y1i7ru?p=82&vd_source=3cf72bb393b8cc11b96c6d4bfbcbd890)
3.4SQL提示
一个字段多个索引时候,可以用一下语句决定用哪一个索引,不指定,mysql会自行决定用哪一个
3.5 覆盖索引
这个图第二条语句,name不是二级索引,所以需要回表查询.
3.6 前缀索引
(视频https://www.bilibili.com/video/BV1Kr4y1i7ru?p=85&vd_source=3cf72bb393b8cc11b96c6d4bfbcbd890)
3.7 单列索引和联合索引的选择
3.8 索引设计的原则
3.9索引的总结
4.SQL优化
insert的优化
个人工作中,第二种,在开发中,用mybatis时候,确实比较常用. 手动提交事务!
load指令
主键优化
主键乱序插入,有可能产生也分页现象,会增加插入耗时
删除时候,有可能产生页合并
(https://www.bilibili.com/video/BV1Kr4y1i7ru?p=90&spm_id_from=pageDriver&vd_source=3cf72bb393b8cc11b96c6d4bfbcbd890)
主键设计的优化
order by 优化
group by 优化
在group by操作时候,可以通过建立对应的group by字段索引,提高效率
索引的使用,也是满足最左前缀法则
limit优化
将 select * from tb_sku limit 2000000,10优化成上面,确实更省时间
count优化
update 语句的优化
更新的条件是索引,那么就是行锁,如果不是索引,会升级为表锁.