寻找改进两个表/查询之间的双左联接

时间:2019-04-29 09:31:15

标签: sql ms-access join ms-access-2010

我有一个查询,该查询使用从表到查询的双重联接,两个左联接。它工作正常,但最近我注意到有些滞后,因为更多记录已添加到基础表中。我担心的是滞后,并想知道是否有更好的方法来解决这个问题。

我还对嵌套查询进行了一些研究,但是我的尝试没有给我想要的输出/结果。

SELECT 
 BulkStockV1.TyreIndividualID, 
 BulkStockV1.TyrePatternID, 
 BulkStockV1.TyreStatusID, 
 qSelStockFitmentNew.JobCardDate,
 qSelStockFitmentNew.JobCardNumber, 
 qSelStockFitmentNew.Horse_ID, 
 qSelStockFitmentNew.Trailer_ID, 
 qSelStockFitmentNew.WheelPos, 
 BulkStockV1.BulkOrderID, 
FROM BulkStockV1 
LEFT JOIN qSelStockFitmentNew 
**ON (BulkStockV1.TyrePatternID = qSelStockFitmentNew.Pattern_ID) 
AND (BulkStockV1.TyreIndividualID = qSelStockFitmentNew.TyreIndividual_ID)**
ORDER BY 
 qSelStockFitmentNew.JobCardDate, 
 qSelStockFitmentNew.JobCardNumber, 
 qSelStockFitmentNew.Horse_ID, 
 qSelStockFitmentNew.Trailer_ID, 
 qSelStockFitmentNew.WheelPos, 
 BulkStockV1.TyreIndividualID;

我尝试删除第二个联接,这样可以加快查询速度,但结果/输出也将发生变化。

1 个答案:

答案 0 :(得分:0)

对于此查询:

SELECT . . . 
FROM BulkStockV1 bs LEFT JOIN
     qSelStockFitmentNew sfn
     ON bs.TyrePatternID = sfn.Pattern_ID AND
        bs.TyreIndividualID = sfn.TyreIndividual_ID
ORDER BY . . .

首先,BulkStockV1可能是一个视图。至少,这就是我解释V1的方式。如果是这样,则可能是导致性能问题的原因。

对于此查询,您需要qSelStockFitmentNew(Pattern_ID, TyreIndividual_ID)上的单个复合索引。因为这是LEFT JOIN,所以第二张表上的索引更好。

您有一个ORDER BY。 las,它混合了两个表中的列,因此无法消除使用索引进行的排序。