我有以下查询需要一段时间才能运行,因为ir_sales_summary是大约20亿行:
array_combine(array_column($records, 'ContractorName'),array_column($records, 'BonusAmount'));
(值得注意的是,由于它使用的是从旧服务中获取数据的视图,因此需要大约3个小时才能运行)
我认为有一种加速过滤的方法,因为我只需要2017年的数据。我应该从大表(i)过滤还是从更小的周末表过滤(这只给我们一周的结束日期)?
答案 0 :(得分:0)
试试这个。这可能有所帮助,将查询中的第一个表加入静态表到事实/动态表将影响我相信的查询性能。
SELECT c.ChainIdentifier
,s.SupplierIdentifier
,s.SupplierName
,i.Weekend
,sum(sales_units_cy) AS TY_unitSales
,sum(sales_cost_cy) AS TY_costDollars
,sum(sales_units_ret_cy) AS TY_retailDollars
,sum(sales_units_ly) AS LY_unitSales
,sum(sales_cost_ly) AS LY_costDollars
,sum(sales_units_ret_ly) AS LY_retailDollars
FROM Suppliers s
INNER JOIN (
SELECT we
,weeekend
,supplierid
,chainid
,sales_units_cy
,sales_cost_cy
,sales_units_ret_cy
,sales_units_ly
,sales_cost_ly
,sales_units_ret_ly
FROM ir_sales_summary i
INNER JOIN tmpWeekend we
ON we.SaleDate = i.saledate
WHERE year(i.saledate) = '2017'
) i
ON s.SupplierID = i.SupplierID
INNER JOIN Chains c
ON c.ChainID = i.ChainID
GROUP BY c.ChainIdentifier
,s.SupplierIdentifier
,s.SupplierName
,i.Weekend