84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
学习是最好的投资!
單獨查詢,使用鍵值對
很簡單也很實用的一個方案就是建立中間表, 用空間換時間。
另外當資料量大到一定程度情況下,考慮分庫分錶,可以看看mycat中間件。
個人建議先一個個表排除看是哪個表影響查詢的速度,確定是哪個表之後,然後再根據其做索引優化
從資料庫最佳化角度出發,最後結果就一個數count(*)大量的關聯導致記憶體消耗跟時間浪費.
給個思路吧:將sql結果做成如下:
最後count(*)等於每一行數量相乘最後相加,即:(數量11*數量12*...*數量16)+(數量21*...*數量26)以減少大量的笛卡爾積.
sql:
select t_for_sale.id, nvl(t1.count1, 0), ... left join (select id, count(*) count1 from t_user group by id) t1 on t1.id=t_for_sale.id .... from t_for_sale
單獨查詢,使用鍵值對
很簡單也很實用的一個方案就是建立中間表, 用空間換時間。
另外當資料量大到一定程度情況下,考慮分庫分錶,可以看看mycat中間件。
個人建議先一個個表排除看是哪個表影響查詢的速度,確定是哪個表之後,然後再根據其做索引優化
從資料庫最佳化角度出發,最後結果就一個數count(*)大量的關聯導致記憶體消耗跟時間浪費.
給個思路吧:
將sql結果做成如下:
最後count(*)等於每一行數量相乘最後相加,
即:(數量11*數量12*...*數量16)+(數量21*...*數量26)
以減少大量的笛卡爾積.
sql: