我创建了一个查询,该查询通过将[SWBOM]表和[Walls Routing Table]联接到[MatchingRowsOutput-RU]表中。 在查询的第一部分中,它使用内部联接基于=条件收集所有记录。在第二部分中,它将收集所有非精确记录。在内部联接上,必须使用IN条件,这实际上减慢了检索速度。运行大约需要50秒。
我想优化此查询以获得更好的结果时间。对于sql或编程而言,这是一个很新的知识,我不熟悉可以用来替换此IN条件的语法。我必须使用此IN条件,因为它希望返回许多记录。
非常感谢您的帮助。
我只运行了一段代码,它通过一个选择和内部联接来处理带有IN条件的非精确代码,而这正是所有时间所消耗的。为了检索许多记录,必须使用其他语法而不是使用IN条件。单独处理的其他部分运行很快。它从其中检索记录的表之一仅包含231,000条记录。
下面是我到目前为止编写的代码。
Insert into [SSIS-POC].dbo.[MatchingRowsOutput-RU]
(cprj, PartNumber, SWITEM, QTY, mitm, opno, tano, cwoc, mcno, sutm, rutm, prte, mnoc, mcoc, olap, exin, subr, indt, exdt, bfls, qpnt, nnts, desn, txta)
SELECT
PartList.cprj,
PartList.PartNumber,
PartList.SWITEM,
PartList.QTY,
RUMaster.mitm,
RUMaster.opno,
RUMaster.tano,
RUMaster.cwoc,
RUMaster.mcno,
RUMaster.sutm,
RUMaster.rutm,
RUMaster.prte,
RUMaster.mnoc,
RUMaster.mcoc,
RUMaster.olap,
RUMaster.exin,
RUMaster.subr,
RUMaster.indt,
RUMaster.exdt,
RUMaster.bfls,
RUMaster.qpnt,
RUMaster.nnts,
RUMaster.desn,
RUMaster.txta
FROM
[SSIS-POC].dbo.SWBOM as PartList
INNER JOIN
ItemMasterRoutingPOC.dbo.[Walls Routing Table] AS RUMaster ON RUMaster.mitm = PartList.PartNumber
UNION ALL
SELECT
PartList.cprj,
PartList.PartNumber,
PartList.SWITEM,
PartList.QTY,
RUMaster.mitm,
RUMaster.opno,
RUMaster.tano,
RUMaster.cwoc,
RUMaster.mcno,
RUMaster.sutm,
RUMaster.rutm,
RUMaster.prte,
RUMaster.mnoc,
RUMaster.mcoc,
RUMaster.olap,
RUMaster.exin,
RUMaster.subr,
RUMaster.indt,
RUMaster.exdt,
RUMaster.bfls,
RUMaster.qpnt,
RUMaster.nnts,
RUMaster.desn,
RUMaster.txta
FROM
[SSIS-POC].dbo.SWBOM as PartList
INNER JOIN
ItemMasterRoutingPOC.dbo.[Walls Routing Table] AS RUMaster ON
RUMaster.mitm IN --**********PROBLEM IS HERE WITH THE IN CONDITION
(SELECT mitm FROM ItemMasterRoutingPOC.dbo.[Walls Routing Table]
WHERE mitm LIKE (LEFT(PartList.PartNumber,8) + '-%')
--WHERE mitm = PartList.itlu
)
LEFT JOIN
( SELECT
PartList.PartNumber as FoundPartNumber
FROM
[SSIS-POC].dbo.SWBOM as PartList
INNER JOIN
ItemMasterRoutingPOC.dbo.[Walls Routing Table] AS RUMaster ON RUMaster.mitm = PartList.PartNumber
) IT ON IT.FoundPartNumber = PartList.PartNumber
WHERE
IT.FoundPartNumber IS NULL;