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 
+0

你在的地方有哪些指標? – JNK 2012-01-18 15:34:02

+0

代碼和vendorID是索引 – 2012-01-18 15:45:43

+0

多個子查詢有可能顯着影響性能。 – 2012-01-18 16:06:59

回答

2

您可以用它來消除碼錶的太多掃描:

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 
+0

將嘗試ND UPDATE U ON IT – 2012-01-18 15:38:32

+0

已更新Select子句中的小錯別字 – 2012-01-18 15:43:48

+0

關鍵字'GROUP'附近的語法不正確。 – 2012-01-18 16:04:44