运行存储过程时的性能问题
我正在运行一个需要很长时间的存储过程,因此我必须将超时时间增加到将近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
您可以用它来消除码表的太多扫描:
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
将尝试ND UPDATE U ON IT – 2012-01-18 15:38:32
已更新Select子句中的小错别字 – 2012-01-18 15:43:48
关键字'GROUP'附近的语法不正确。 – 2012-01-18 16:04:44
你在的地方有哪些指标? – JNK 2012-01-18 15:34:02
代码和vendorID是索引 – 2012-01-18 15:45:43
多个子查询有可能显着影响性能。 – 2012-01-18 16:06:59