优化groupBy查询

时间:2018-05-12 08:05:25

标签: sql group-by mariadb aggregate-functions

我有两个表A和B.A有id, startDate, endDate。 B有id, date, count。目标是为startDate中的每个条目获取endDateA之间的最大数量。

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秒才能完成。任何人都可以提出我可以尝试的建议吗?

1 个答案:

答案 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`);