我有一个名为性能比较:全外连接VS联盟,联盟所有
mktActualsales (SaleID, EmployeeID, PeriodID,PositionID)
mktActualSalesItems(SaleItemID, saleID, Item, Quantity)
mktSalesTargets(TargetID, EmployeeID, PeriodID,PositionID)
mktSalesTargetItems(TargetITemID, TargetID,ItemID, Quantity)
sysPeriods(PeriodID, StartDate, EndDate)
的关系是上面的表格中销售明显和saleDetails通过SaleID和目标以及相关TargetDetail通过目标ID的相关表。我想要展示的是员工销售额和各个时期的目标。有些时候销售缺失,在其他时期可能缺少目标。我做这个计划(到目前为止)是采取销售和销售的内部连接在一个子查询中,目标和targetDetail在另一个子查询中,然后在这两个子查询中完全外连接为我提供我需要的数据。但结果非常缓慢。我能做些什么来加速表现。我已经搜索了性能比较黑/白完全外连接和工会,但没有找到任何运气。在现阶段,我不知道,如果结果我想可以用联盟/联盟所有
编辑
这是我迄今为止的查询中来达到的。编辑表格以及
SELECT sale.ActualSaleID,
COALESCE (sale.EmployeeID, saleTarget.EmployeeID) AS EmployeeID,
COALESCE (sale.PositionID, saleTarget.PositionID) AS PositionID,
COALESCE (sale.PeriodID, saleTarget.PeriodID) AS PeriodID,
COALESCE (sale.SKUID, saleTarget.SKUID) AS SKUID,
COALESCE (sale.SalesQuantity, 0) AS SalesQuantity,
saleTarget.SalesTargetID,
COALESCE (saleTarget.TargetQuantity, 0) AS TargetQuantity,
saleTarget.SalesTargetItemID,
sale.ActualSaleItemID,
p.StartDate,
p.EndDate
FROM (
SELECT s.ActualSaleID,
s.EmployeeID,
s.PeriodID,
s.PositionID,
si.ActualSaleItemID,
si.SKUID,
si.SalesQuantity
FROM dbo.mktActualSaleItems AS si
INNER JOIN dbo.mktActualSales AS s
ON si.ActualSaleID = s.ActualSaleID
) AS sale
FULL OUTER JOIN
(
SELECT t.EmployeeID,
t.PeriodID,
t.PositionID,
t.SalesTargetID,
ti.SKUID,
ti.TargetQuantity,
ti.SalesTargetItemID
FROM dbo.mktSalesTargetItems AS ti
INNER JOIN dbo.mktSalesTargets AS t
ON t.SalesTargetID = ti.SalesTargetID
) AS saleTarget
ON sale.PeriodID = saleTarget.PeriodID
AND sale.PositionID = saleTarget.PositionID
AND sale.SKUID = saleTarget.SKUID
INNER JOIN dbo.sysPeriods AS p
ON p.PeriodID = COALESCE (sale.PeriodID, saleTarget.PeriodID)
问候
这两个子查询都是在PeriodID和EmployeeID – 2011-06-17 07:35:51
上外部连接的吗?您可以给我们提供您迄今为止的查询以及您想要实现的一些示例吗?我不完全明白你想要的结果是什么。 – 2011-06-17 07:39:12
@Oliver Hanappi编辑了这个问题 – 2011-06-17 07:58:44