本文講解如何把一條帶有一個或多個left join或right join的sql語句拆分成多條sql語句。MySQL進行連表查詢效率是很低的,特別是數據很大,而且並發量很高的情況,索引都無法解決問題,最好的辦法就是把sql語句拆分成多條單表查詢的sql。
我們公司電商網站現在要做網站服務化,用java做中間件,PHP調用java接口獲取數據,數據表也進行了拆分,分庫,要求不使用連表查詢,有連表查詢的sql語句想辦法拆分多條sql語句,然後統一使用java接口。
這樣做的目的一是為了網站服務化做調整,數據的增刪查改都封裝到具體的業務裡面,二是為了提高性能,減少數據庫壓力,說來說去還是為了提高效率。
我們看看一個join多張表的sql如何拆分多條sql。
select u1.uid,u1.uname,u2.add from user as u1 left join userinfo as u2 on u1.uid=u2.uid left join money as u3 on u1.uid=u3.uid where u1.country='c'
這條sql語句left join三張表,分別是user作為主表,連userinfo,money表。首先可以查出所有user的數據,有了第一條拆分的sql:
select uid,uname from user where country='c'
由於條件是user.uid=userinfo.uid,所以可以把取得的uid用”,”連接,第二個拆分的sql如下:
select uid,add from userinfo where uid in(32,34,23,23)
這樣得出了符合第一個left join條件下的uid,uname和add字段的結果,其實到這裡就已經實現了以上left join語句的需求,如果還要查詢money表的字段,以此類推,把uid作為in的條件查money表。