我们有一个大表,我们称之为“数据”,有大约 20 亿行,数据按日期、位置、名称进行索引。每行都有一个“分数”。
我们还有一个表格,其中包含该表格中所有不同的日期。
如果我运行这样的查询:
SELECT AVG(score)
FROM Data d
WHERE d.date IN (
SELECT today
FROM dates dt
WHERE dt.today > '2020-01-01'
AND dt.today < '2020-06-01'
AND d.location = 'Location1');
此查询会在几秒钟后返回。如果我然后运行相同的查询,但查找按名称分组的平均分数,则查询需要几分钟。IE
SELECT d.name, AVG(score)
FROM Data d
WHERE d.date IN (
SELECT today
FROM dates dt
WHERE dt.today > '2020-01-01'
AND dt.today < '2020-06-01'
AND d.location = 'Location1')
GROUP BY .d.name;
不同名称的数量是几十万,有什么技术可以提高这样的查询速度吗?