我有两个表A和B.A有id, startDate, endDate
。 B有id, date, count
。目标是为startDate
中的每个条目获取endDate
和A
之间的最大数量。
select a.id, a.startDate, a.endDate, max(b.count)
from A a join B b
on a.id=b.id
and b.date>=a.startDate
and b.date<=a.endDate
group By a.id, a.startDate, a.endDate;
e.g。
A - &gt; (1,2016-01-01,2016-01-03)
B - &gt; (1,2016-01-01,1),(1,2016-01-02,4),(1,2016-01-03,3),(1,2016-01-04,2)
查询结果 - &gt; (1,2016-01-01,2016-01-03,4)这里4是(1,4,3)
的最大值我在表id, startDate, endDate
的{{1}}和表A
的{{1}}上有索引。 id, date
中的行数约为10K,而B
中的行数为200万。上述查询大约需要5-6秒才能完成。任何人都可以提出我可以尝试的建议吗?
答案 0 :(得分:0)
尝试添加这些索引并查看哪些索引有用(使用EXPLAIN):
ALTER TABLE `A` ADD INDEX `a_idx_id_startdate_enddate` (`id`,`startDate`,`endDate`);
ALTER TABLE `B` ADD INDEX `b_idx_id_date_count` (`id`,`date`,`count`);