001.png002.png
004.png

MyISAM和InnoDB的区别:

003.png005.png

Mysql执行顺序:006.png007.png008.png009.png010.png011.png012.png013.png014.png015.png

需要简历索引的情况:016.png
mysql优化器:017.png018.png
mysql性能瓶颈:019.png
执行顺序:
020.png
id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行。
1.png

select_type:

2.png3.png

table:显示执行的是哪张表

type:显示的是访问类型5.png

4.png6.png7.png8.png9.png10.png11.png12.png13.png14.png15.png
16.png17.png18.png19.png20.png
两张表连接的时候:左连接建立右表的索引,右连接建立左表的索引会好。
三张表的时候:左连接建立后两张表的索引 ,单独建
21.png
如何避免索引失效:
22.png
最佳左前缀法则:23.png
https://blog.csdn.net/moni_mm/article/details/82662228
且中间的index不能断24.png25.png26.png
最好别再左边写%,右边的可以写27.png
如何保证mysql语句like左右两边都有%的情况下索引不失效: 建立复合索引.
当建立了name 和age复合索引后:
1.png2.png
但是当使用select * 之后,索引失效3.png
查全部字段也会失效 4.png
字符串类型不加’’ 单引号 也会使索引失效,因为mysql底层做了类型转换。5.png
少用or,用它连接时会索引失效6.png
小结:7.png
例子: 建立复合索引 c1 c2 c3 c4之后,分析下面的情况8.png
下面这种情况,第一个会用到四个索引 ,第二个也会用到四个索引9.png88.png
11.png12.png
下面这道题,把握一点,建立复合索引 c1,c2,c3,c4 相当于建立了c1, c1c2, c1c2c3,c1c2c3c4,四个索引 第二道题会用到filesort的原因是 没有 c1c3c2索引.
13.png14.png
比较一下两种情况:
因为c2=’a2’是一个常量字段,排序时可以忽略,可以理解为 Order by c3,c2 变成 order by c3,
此时会用到c1c2c3索引,从而没有filesort15.png
group by 会产生临时表:16.png17.png
like:18.png19.png20.png89.png21.png
小表驱动大表:
22.png23.png
order by 字句,尽量使用index方式排序,避免使用filesort方式排序
示例:index:age 和 birth的符合索引24.png25.png26.png27.png28.png
order by
29.png
group by关键字 优化
1.png
慢查询日志:2.png3.png4.png5.png6.png
工作中常用参考:7.png8.png
插入1000w数据:
1、建表
2、设置log_bin_trust_function_creators:9.png
锁机制
https://www.cnblogs.com/kisun168/p/11320549.html10.png11.png12.png13.png14.png15.png16.png17.png
简而言之,就是读锁会阻塞写,但是不会阻塞读,而写锁则会把读和写都堵塞18.png19.png20.png21.png
并发事务处理带来的问题:
更新丢失:22.png23.pngimage.png
不可重复读:image.png
幻读:image.png
脏读:image.png
索引使用不当,会使行锁变表锁:
b 是varchar 类型的,若b=4000,赋值为int类型的,则会使行锁失效
1.png
间隙锁的危害:间隙锁也会导致行锁变成表锁2.png3.png
面试题:如何锁定一行4.png
总结:5.png
行锁分析:
image.pngimage.png
优化建议:
image.png
主从复制image.png