1. 程式人生 > >Mysql中查詢優化

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 即使沒有過濾條件用到索引,也可以直接使用索引。