1. 程式人生 > >mysql多表查詢優化SQL

mysql多表查詢優化SQL

今天偶爾在優化一個查詢功能的時候心血來潮想寫點東西跟大家分享下經驗!!

MySQL優化查詢(一對多):

1、使用left join(right join),在很多資料的時候儘量避免直接使用where語句 .... and .... and ...這類寫法,假設三張表每張表有一千條資料,本意想查出<=1000條資料,當使用where語句查詢,就查出了1000*1000*1000=10億條資料,很大程度上浪費了記憶體執行時間

2、需要哪些列就查哪些列,不要有很多冗餘的列查詢出來,有的時候一張表當中有好幾十個欄位,我們需要的可能就是其中的三四個或者四五個欄位,在這樣的情況下,我們就直接查這幾個我們需要的欄位就可以了

3、儘量避免使用  .*  ,因為使用點* 需要先去資料字典當中查詢你所查詢的表當中所擁有的欄位,再轉換成對應的欄位的放在select後面查詢出來

4、大於號(>)永遠比(>=)執行更慢

5、查詢的時候我們應該把更具有限制條件的條件語句放在最前面,比如我們有一張學生成績表(score),分別有學號、語數英三科成績以及總成績總共五列,要查詢數學、英語優秀,語文及格,總成績再前一百名的人

select * from score where sno in(select sno from score where language>60 and math>80 and english>80 order by total_score desc)(慢)

select sno,language,math,english,total_score from score where sno exist (select sno from where engilsh>=80 and math>=80 and language>=80 order by total_score desc)(快)

上面那條語句將大於60分的條件放前面,大於80的放後面,導致很多情況下多查了很多資料

就比如說一張表裡有有很多欄位,有一百萬條記錄,主鍵id由1到1百萬,當我們需要查詢小於1000大於100的資料的時候,我們就應該把小於1000這個條件放前面,這就是相對比下最具限制性的條件