left join聯查提高執行效能

2021-09-07 15:53:42 字數 1106 閱讀 6568

在專案應用中,很多功能需要多張資料庫表聯查,甚至跨資料庫查詢獲取資料。sql的執行效能很能影響

服務的體驗感,今天就遇到了這樣問題,原來的sql是這樣的:

select c.clientname,c.clientid,count(c.clientname),z.zonename from

scp_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.clientid 

left 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 測試資料...