我正在使用MS Access 2013(无法访问其他SQL程序)。
我必须根据超过50个客户(总共540,000行)的30年(开始时为10800行)的每日细分来过滤数据。 我的查询速度存在问题。经过一些连接和过滤后,整个过程需要几秒钟才能运行。为了加快计算,我尝试了:
打破查询(使用尽可能少的联接)
仅过滤“有效数据”;
聚合迭代查询;
将日期编入索引(以整数形式)。
需要为每个日历日期添加由客户汇总的总计DealValue,用于其“活动期间”(给定交易的StartDate和EndDate之间的每一天)。这些交易可能会延续30年。看起来 LEFT JOIN 导致所有减速。
我的最终查询如下:
SELECT QMaster.CalDate,
QDeals.CustomerID,
Sum(IIf([QDeals]![Limit]="S",[QDeals.DealValue],0)) AS S,
Sum(IIf([QDeals]![Limit]="L",[QDeals.DealValue],0)) AS L
FROM QMaster
LEFT JOIN TDeals
ON (QMaster.CalDate> QDeals.DealStartDate)
AND (QMaster.CalDate< QDeals.DealEndDate)
GROUP BY QMaster.CalDate, QDeals.CustomerID;
-- where QMaster (540.000 rows) / QDeals (> 10.000 rows) / calculation time 5<>7s
-- the query may contain typos as I had to change the name description for disclosure.
有关如何更换LEFT JOIN的任何提示?
此查询之前的任何其他速度改进?
我想在我的'主'查询中添加一个'互动'访问表单,这会变得很慢(不是用户友好的)。