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

+0

codeとvendorIDはインデックス –

+0

です。複数のサブクエリは、パフォーマンスに大きな影響を与える可能性があります。 –

答えて

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更新を実行します –

+0

は、SELECT句の小さな誤植を更新しました –

+0

キーワード 'GROUP'の近くに構文が正しくありません。 –

関連する問題