Mysql中查詢優化
阿新 • • 發佈:2018-12-18
注意:
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 即使沒有過濾條件用到索引,也可以直接使用索引。