Mysql 索引 以及 SQL 优化 (自用笔记)

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 语句的优化

更新的条件是索引,那么就是行锁,如果不是索引,会升级为表锁.

经验分享 程序员 微信小程序 职场和发展