MYSQL性能优化
2021-07-01 本文已影响0人
砌月东谷
1、单表优化
- 如果(a,b,c,d)复合索引,并且和使用的顺序全部一致,而且不夸列使用,则复合索引全部会被使用,如果部分一致,而且不夸列使用,则部分索引会被使用
- where和order by的索引 连续起来使用,不要跨列使用
- 避免出现using temporary 的方法就是group by的排序字段要保证被包含在where语句中,这是因为sql在执行时,是先执行where后执行group by ,假设在执行where时没有使用x字段,而x字段却在group by中出现了,那么久需要在执行group by 时重新再创建一张临时表用来处理x字段
- 对于两张表关联查询的情况,一般建议是给两张表的关联字段都加上索引,特殊情况下,如果要求左连接只能给一张表加索引,那么建议优先在右表的关联字段上加上索引
2、双表优化
- 对于两张表关联查询的情况,一般建议是给两张表的关联字段都加上索引,特殊情况下,如果要求左连接只能给一张表加索引,那么建议优先在右表的关联字段上加上索引
- 小表驱动大表,where或者on的时候先写数据量小的表放左边
3、避免索引失效的原则
- 不要再索引字段上进行任何操作(计算,使用函数,显示/隐式类型转换),复合索引一个失效全部失效,单值索引,某个单值索引的失效不会影响到其他单值索引
- 不能对复合索引使用大于、不等于或is null ,is not null
- like查询不要以%开头
- where后面不要使用or
4、优化数据库性能的几点补充
1、exist和in
当主查询的数据集大时,使用in
当子查询的数据集大时,使用exist
2、order by
全部排序字段在排序时,保持顺序一致性,如对多个字段排序,尽量都是升序或都是降序