SQL Server效率-查询花费的时间太长

时间:2020-04-07 17:54:03

标签: sql sql-server

我创建了一个查询,该查询通过将[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;

0 个答案:

没有答案
相关问题