我有一個處理排序,過濾和分頁(使用Row_Number)和一些時髦技巧的存儲過程:) SP運行在一個具有〜140k行的表上。ASP.NET的SP性能不佳
整件事情效果很好,至少前幾頁是超快的。 但是,如果我嘗試導航到更高的頁面(例如,前往10k的最後一頁),整個事情就會停頓並導致SQL超時錯誤。
如果我運行相同的查詢,使用工作室經理查詢窗口內同一PARMS,響應頁碼我傳遞的瞬間不論。
目前,它的測試代碼,簡直是綁定到一個ASP:Datagrid中使用.NET 3.5
的SP看起來是這樣的:
BEGIN
WITH Keys
AS (
SELECT
TOP (@PageNumber * @PageSize) ROW_NUMBER() OVER (ORDER BY JobNumber DESC) as rn
,P1.jobNumber
,P1.CustID
,P1.DateIn
,P1.DateDue
,P1.DateOut
FROM vw_Jobs_List P1
WHERE
(@CustomerID = 0 OR CustID = @CustomerID) AND
(JobNumber LIKE '%'[email protected]+'%'
OR OrderNumber LIKE '%'[email protected]+'%'
OR [Description] LIKE '%'[email protected]+'%'
OR Client LIKE '%'[email protected]+'%')
ORDER BY P1.JobNumber DESC),SelectedKeys
AS (
SELECT
TOP (@PageSize)SK.rn
,SK.JobNumber
,SK.CustID
,SK.DateIn
,SK.DateDue
,SK.DateOut
FROM Keys SK
WHERE SK.rn > ((@PageNumber-1) * @PageSize)
ORDER BY SK.JobNumber DESC)
SELECT
SK.rn
,J.JobNumber
,J.Description
,J.Client
,SK.CustID
,OrderNumber
,CAST(DateAdd(d, -2, CAST(isnull(SK.DateIn,0) AS DateTime)) AS nvarchar) AS DateIn
,CAST(DateAdd(d, -2, CAST(isnull(SK.DateDue,0) AS DateTime)) AS nvarchar) AS DateDue
,CAST(DateAdd(d, -2, CAST(isnull(SK.DateOut,0) AS DateTime)) AS nvarchar) AS DateOut
,Del_Method
,Ticket#
,InvoiceEmailed
,InvoicePrinted
,InvoiceExported
,InvoiceComplete
,JobStatus
FROM SelectedKeys SK
JOIN vw_Jobs_List J ON j.JobNumber=SK.JobNumber
ORDER BY SK.JobNumber DESC
END
而且它通過
sp_jobs (PageNumber,PageSize,FilterExpression,OrderBy,CustomerID)
稱爲
例如
sp_Jobs '13702','10','','JobNumberDESC','0'
任何人都可以闡明什麼可能是在SQL查詢窗口並執行一個數據集的一個asp.net頁面之間的性能差異巨大的原因任何光線?
很抱歉的佈局,新來的,不知道該如何使代碼看起來珀迪: - } – Rich
,你可能還需要交叉後這個過也在DBA StackExchange上。 http://dba.stackexchange.com/ – Jordan
@Jordan感謝指針,我剛剛在那裏註冊併發布。 – Rich