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: