Mysql中查询优化

注意:

1、保证被驱动表的join字段已经被索引

 

2、left join 时,选择小表作为驱动表,大表作为被驱动表。

 

3、inner join 时,mysql会自己帮你把小结果集的表选为驱动表。

 

4、子查询尽量不要放在被驱动表,有可能使用不到索引。

 

5、能够直接多表关联的尽量直接关联,不用子查询。

 

子查询优化

尽量不要使用not in 或者 not exists

用left outer join  on  xxxis null 替代

排序分组优化

case

createindex idx_age_deptid_name on emp (age,deptid,name)

以下  是否能使用到索引能否去掉using filesort

 #无过滤不索引

 

#顺序错必排序


 #方向反必排序

 

ORDER BY子句,尽量使用Index方式排序,避免使用FileSort方式排序

 

索引的选择

 

eg:

 

#查询年龄为30岁的,且员工编号小于101000的用户,按用户名称排序

sELECT SQL_NO_CACHE * FROM emp WHERE age=30 AND empno <101000 ORDER BY NAME ;

执行案例前先清除emp上的索引,只留主键

 

索引的选择

 

group by 使用索引的原则几乎跟orderby一致 ,唯一区别是groupby 即使没有过滤条件用到索引,也可以直接使用索引。

 

 

 

 

 

 

 

 

 

 

posted @ 2022-12-07 18:37  diligently  阅读(41)  评论(0)    收藏  举报