我有一个查询,我将多个聚合子查询连接在一起......
SELECT productionDate, shift, productID, workerID, infeedweight, outfeedweight, ...
FROM generalTable
LEFT JOIN
(SELECT productionDate, shift, productID, workerID, sum(weight) as infeedweight
FROM infeed
# WHERE productionDate BETWEEN '2016-01-01' AND '2016-01-07'
GROUP BY productionDate, shift, productID, workerID)
t1 USING (productionDate, shift, productID, workerID)
LEFT JOIN
(SELECT productionDate, shift, productID, workerID, sum(weight) as outfeedweight
FROM outfeed
# WHERE productionDate BETWEEN '2016-01-01' AND '2016-01-07'
GROUP BY productionDate, shift, productID, workerID)
t2 USING (productionDate, shift, productID, workerID)
...
etc
WHERE productionDate BETWEEN '2016-01-01' AND '2016-01-07'
如果我用注释掉的指示的WHERE语句(但不是顶级的WHERE)运行它,则需要11秒。如果WHERE语句未注释,则需要0.1秒。结果完全一样。
有没有办法(可能使用优化器提示或其他东西)获取查询以在所有子查询中使用顶级WHERE子句而不必在任何地方重复它?
我使用的报告软件似乎只是为了在SQL语句的末尾放置一个WHERE子句,所以如果不可能,我可能需要做一些丑陋的黑客才能使它工作。
此外,报告软件将按班次,productID和workerID以及productionDate进行过滤。
编辑:更改了SQL表中的错误