MyISAM和InnoDB的区别:
Mysql执行顺序:
需要简历索引的情况:
mysql优化器:
mysql性能瓶颈:
执行顺序:
id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行。
select_type:
table:显示执行的是哪张表
type:显示的是访问类型
两张表连接的时候:左连接建立右表的索引,右连接建立左表的索引会好。
三张表的时候:左连接建立后两张表的索引 ,单独建
如何避免索引失效:
最佳左前缀法则:
https://blog.csdn.net/moni_mm/article/details/82662228
且中间的index不能断
最好别再左边写%,右边的可以写
如何保证mysql语句like左右两边都有%的情况下索引不失效: 建立复合索引.
当建立了name 和age复合索引后:
但是当使用select * 之后,索引失效
查全部字段也会失效
字符串类型不加’’ 单引号 也会使索引失效,因为mysql底层做了类型转换。
少用or,用它连接时会索引失效
小结:
例子: 建立复合索引 c1 c2 c3 c4之后,分析下面的情况
下面这种情况,第一个会用到四个索引 ,第二个也会用到四个索引
下面这道题,把握一点,建立复合索引 c1,c2,c3,c4 相当于建立了c1, c1c2, c1c2c3,c1c2c3c4,四个索引 第二道题会用到filesort的原因是 没有 c1c3c2索引.
比较一下两种情况:
因为c2=’a2’是一个常量字段,排序时可以忽略,可以理解为 Order by c3,c2 变成 order by c3,
此时会用到c1c2c3索引,从而没有filesort
group by 会产生临时表:
like:
小表驱动大表:
order by 字句,尽量使用index方式排序,避免使用filesort方式排序
示例:index:age 和 birth的符合索引
order by
group by关键字 优化
慢查询日志:
工作中常用参考:
插入1000w数据:
1、建表
2、设置log_bin_trust_function_creators:
锁机制
https://www.cnblogs.com/kisun168/p/11320549.html
简而言之,就是读锁会阻塞写,但是不会阻塞读,而写锁则会把读和写都堵塞
并发事务处理带来的问题:
更新丢失:
不可重复读:
幻读:
脏读:
索引使用不当,会使行锁变表锁:
b 是varchar 类型的,若b=4000,赋值为int类型的,则会使行锁失效
间隙锁的危害:间隙锁也会导致行锁变成表锁
面试题:如何锁定一行
总结:
行锁分析:
优化建议:
主从复制