小表关联大表的性能问题,目前我一张大表,10亿左右,用日期分区,每个分区大概是5000W。有张很小的表,表数据是变动的。大概只有几条。
select dt,count(1)
from 大表 t
join 小表 t1
on t.dt=t1.dt
group by dt
使用上面的方式查询非常的慢,我也改使用left semi join和mapjon、in、exists性能都很差。
如果改成
select dt,count(1)
from 大表 t
where t.dt in(日期1,日期2)
group by dt
这种方式很快。
请问有什么好的办法提升性能。因为日期参数不是固定的,只能从小表里面取
上面的方式走的是全表扫描
下面的添加了where子句,走的是分区查询
解决办法:
select dt,count(1)
from 大表 t
where t.dt in (select dt from 小表)
group by dt