学习是最好的投资!
單獨查詢,使用鍵值對
很簡單也很實用的一個方案就是建立中間表, 用空間換時間。
另外當資料量大到一定程度情況下,考慮分庫分錶,可以看看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: