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 @   diligently  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示