0

ストア プロシージャを実行していますが、これには多くの時間がかかります。そのため、タイムアウトを 3 分近くに増やす必要があります。ストア プロシージャの実行時間を短縮する方法を教えてください。正常に動作します。 100〜500のコードでは、コードが何とか20000を超えると、速度が低下し、最大3〜4分かかります。以下はspです。誰もが最適化を手伝ってくれます.

@GUID uniqueidentifier
-- Insert statements for procedure here
SELECT     
        COUNT(Code.allocatedVendorID) AS Amt, 
        MIN(Code.dateAllocated) AS dateAllocated, 
        derivedtbl_1.startID, derivedtbl_2.endID, 
        tbVendor.name, 
        Code.unitCost, Code.isFree, Code.isAcademic, 
        Code.isVoided, Code.GUID, Code.expiryDate
FROM         
       Code 
        INNER JOIN
              (SELECT     MIN(CodeID) AS startID, GUID
                FROM          Code AS tbAccessCode_1
                GROUP BY GUID) AS derivedtbl_1 
                ON Code.GUID = derivedtbl_1.GUID 
        INNER JOIN
              (SELECT     MAX(accessCodeID) AS endID, GUID
                FROM          Code AS tbAccessCode_1
                GROUP BY GUID) AS derivedtbl_2 
                ON Code.GUID = derivedtbl_2.GUID 
        INNER JOIN  tbVendor 
            ON Code.allocatedVendorID = tbVendor.vendorID
WHERE     (Code.GUID = @GUID) AND (Code.allocatedVendorID > 0)
GROUP BY
        derivedtbl_1.startID, derivedtbl_2.endID, 
        tbVendor.name, 
        Code.unitCost, Code.isFree, Code.isAcademic, 
        Code.isVoided, Code.GUID, Code.expiryDate

ORDER BY dateAllocated DESC
4

1 に答える 1

2

これを使用して、Code テーブルのスキャンが多すぎるのをなくすことができます。

   SELECT     COUNT(Code.allocatedVendorID) AS Amt, 
              MIN(Code.dateAllocated) AS dateAllocated,      
              Code.startID, 
              Code.endID, 
              tbVendor.name, 
              Code.unitCost, Code.isFree, Code.isAcademic, 
              Code.isVoided, Code.GUID, Code.expiryDate
    FROM         
      (select Code.*,
            min(accessCodeID) over (partition by Code.GUID) startID,
            max(accessCodeID) over (partition by Code.GUID) endID
      from Code
      where (Code.GUID = @GUID) AND (Code.allocatedVendorID > 0)
      ) Code
    INNER JOIN
          tbVendor ON Code.allocatedVendorID = tbVendor.vendorID  
    GROUP BY  Code.startID, 
              Code.endID, 
              tbVendor.name, 
              Code.unitCost, Code.isFree, Code.isAcademic, 
              Code.isVoided, Code.GUID, Code.expiryDate
    ORDER BY dateAllocated DESC
于 2012-01-18T15:35:23.870 に答える