在專案應用中,很多功能需要多張資料庫表聯查,甚至跨資料庫查詢獲取資料。sql的執行效能很能影響
服務的體驗感,今天就遇到了這樣問題,原來的sql是這樣的:
select c.clientname,c.clientid,count(c.clientname),z.zonename fromscp_db.tbl_user_info u,smartcommondb.tbl_stat_report_info s,smartcommondb.tbl_client_info c,smartcommondb.tbl_zone_info z
where u.loginname=s.actionuser and u.clientid=c.clientid and c.zoneid=z.zoneid group by c.clientid;
當我拿出來執行這句sql的時候,發現這句sql要執行5秒中才能執行完,所以在很多專案的優化中,
優化sql也很重要,因為5秒鐘也要等很長的時間。
所以我修改了這條sql:
select c.clientname,c.clientid,count(c.clientname) as handlenum,z.zonename from smartcommondb.tbl_client_info c left join scp_db.tbl_user_info u on u.clientid=c.clientidleft join smartcommondb.tbl_stat_report_info s on u.loginname=s.actionuser left join smartcommondb.tbl_zone_info z on c.zoneid=z.zoneid group by c.clientid
當我執行新寫的這條sql時,執行的時間是0.3秒,發現用了left join之後,竟然能如此提高sql的執行效能。
於是研究了下left join 的用法。在這便進行簡單的總結。
left join 關鍵字會從左表那裡返回所有的行,即使在右表 (table_name2) 中沒有匹配的行。
經常要連表統計資料時,要求當某張表中對應的資料為空時也要顯示時,就可以用left join 。
具體可參考:
關於使用多表聯查代替LEFT JOIN 的使用方案
還記得,我們在剛剛開始學習mysql的時候,我們的老師或多或少都對我們說。mysql盡量不要去使用多表聯查。但是,理由呢?我們學習的過程之中,不應該僅僅只是去聽 更應該自己思考。我認為任何事情既然其存在必有其存在的含義。因此,我們不應該連考慮都不進行考慮就進行對其的否定。我們也應該勇敢的進行適當的嘗...
換種方法,提高left join查詢的效率
表之間使用聯結查詢時,以left join為例,當聯結的表較多,並且符合條件的記錄個數也很多時,查詢的效率變得十分低下,不過改變一下方法,卻可以避免這個問題。例如 要對系統中各個公司的業務進行統計,公司的業務有很多 業務1 業務2 業務3.業務10,就假設有10項業務,初始的想法是將公司表與這10張...
資料庫多個left join如何執行
select from a left join b on a.abid b.baid left join c on c.cbid b.bcid 順序是先a,b組合成乙個虛擬表,然後虛擬表再和c表關聯 a表先和b表left join 生成虛擬表 假設為t1 是t1直接和c left join 測試資料...