表有1千万+的数据。
sql:
select apkid,
sum(case when actionname='showad' then actioncount else 0 end) as showad,
sum(case when actionname='downloadad' then actioncount else 0 end) as downloadad,
sum(case when actionname='installres' then actioncount else 0 end) as installres
from appsearch_sdk_uuc_useraction
where dt >=20170303 and dt <=20170310
group by apkid
已有的索引:
PRIMARY KEY (`dt`,`apkid`,`actionname`),
KEY `IDX_dt_actionname_apkid` (`dt`,`actionname`,`apkid`)
但是explain的时候,并未走索引,查询时间也都在10s以上。。。
后面又用select+union去查, 也是一样。
求解如何优化sql或者索引。
我看你这种逻辑,很多都是“重复的无用功”
时间串都是过去的串,想象中这些时间上的统计不太会变了。那样的话,每天跑一轮,放在专门的statistics表。
以后随便取就行了。。。
date type sum
20170303 showad 123
这样,你一年下来,这个表也就1000+行
应该走索引才对,你可以先试试单独查select apkid from appsearch_sdk_uuc_useraction
where dt >=20170303 and dt <=20170310 看看是否走索引,再一步一步调试
估计是就日期分布范围太小了。。无法使用索引。。