0
期間,我有一個ASP:GridView控件中包含列表 數據源我添加自定義分頁,使用過程中,當我使用過程中的MS服務器管理Asp.net(C#)自定義分頁使用存儲過程 - 差績效分頁
工作室其性能很快,只要我嘗試在asp.net中,性能是可怕的在
分頁。 第一步(gridview填充時)非常快,但是當我開始分頁時,
表現殺死,我等待5-25秒傳遞到下一頁。
親愛的,我必須做些什麼來解決這個問題,你會幫我嗎?
該處是存儲過程
CREATE PROCEDURE [sp_QS]
@startRowIndex INT,
@maximumRows INT,
@afterWhere NVARCHAR(MAX),
@sortBy NVARCHAR(MAX),
@totalRows INT OUT
AS
SET NOCOUNT ON;
DECLARE @P NVARCHAR(MAX), @Q1 NVARCHAR(MAX), @Q2 NVARCHAR(MAX)
DECLARE @first_id INT
SET @startRowIndex = (@startRowIndex - 1) * @maximumRows
SET @Q1 = 'query part 1'
SET @Q2 = 'query part 2'
IF @startRowIndex = 0
BEGIN
SET @startRowIndex = 1
END
SET ROWCOUNT @startRowIndex
SET @P = 'SET NOCOUNT ON; DECLARE @out INT SELECT @out = id FROM table1 ' + @Q2 + '
WHERE ' + @afterWhere + ' SELECT @out'
IF OBJECT_ID('tempdb..#t1','u') IS NOT NULL
BEGIN
DROP TABLE #t1
END
CREATE TABLE #t1 (col INT)
INSERT #t1 EXEC(@P)
SELECT @first_id = col FROM #t1
DROP TABLE #t1
--SELECT @first_id AS FFFF --PRINT @first_id
SET ROWCOUNT @maximumRows
SET @P = 'SET NOCOUNT ON;' + 'SELECT ' + @Q1 + ' FROM table ' + @Q2 + ' WHERE (id >=' +
CAST(@first_id AS NVARCHAR(60)) + ') AND (' + @afterWhere + ') ' + @sortBy
EXEC(@P)
SET ROWCOUNT 0
-- GET THE TOTAL ROWS
IF @startRowIndex = 1
BEGIN
SET @P = 'SET NOCOUNT ON;' + 'SELECT COUNT(id) FROM table1 ' + @Q2 + ' WHERE ' +
@afterWhere
IF OBJECT_ID('tempdb..#t2','u') IS NOT NULL
BEGIN
DROP TABLE #t2
END
CREATE TABLE #t2 (col INT)
INSERT #t2 EXEC (@P)
SELECT @totalRows = col FROM #t2
DROP TABLE #t2
SELECT @totalRows AS QueryResultRowCount
END
GO
這裏是ASP.NET中的代碼(用C#)
private void BindData()
{
string connectionString = "Server=localhost;" +
"Database=Northwind;Trusted_Connection=true";
SqlConnection myConnection = new SqlConnection(connectionString);
SqlCommand myCommand = new SqlCommand("usp_GetProducts",
myConnection);
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Parameters.AddWithValue("@startRowIndex",
currentPageNumber);
myCommand.Parameters.AddWithValue("@maximumRows", PAGE_SIZE);
myCommand.Parameters.Add("@totalRows", SqlDbType.Int, 4);
myCommand.Parameters["@totalRows"].Direction =
ParameterDirection.Output;
SqlDataReader sqlReader = myCommand.ExecuteReader();
while(sqlReader.Read())
{
// filling List<> object to bind to gridview as datasource
}
...
}
我不得不按鈕 '下一個' 和 'prvious',按下這些按鈕,我正在改變
currentPageNumber用+或 - 1,後面調用BindData()方法。
在此先感謝
你運行通過SQL調優顧問存儲過程SQL?很多次執行不當的sql語句通過僅添加其他索引或更新Sql Tuning Adviser可爲您提供的統計信息得到解決。 – 2011-06-09 19:19:16
使用CTE代替臨時表http://blogs.x2line.com/al/archive/2005/11/18/1323.aspx – 2011-06-09 19:46:40