2012-06-05 81 views
0

我有一個數據庫充滿了成千上萬的產品,我每次運行不同的查詢時都會查詢它以回收大量數據。我擔心,一旦項目開始實施,越來越多的人開始訪問該網站,該性能將受到影響。我不能增加服務器的功率,所以我會喜歡一個解決方案,可以讓我省卻麻煩。有沒有什麼方法在sql查詢中加載集?分頁的ASP.NET中繼器

select top 20 where xxx 
select next 20 

我不確定。

+1

您需要提供有關數據訪問策略的更多詳細信息。如果你正在使用LINQ,你總是可以使用.Products.Skip(PageNumber * ItemsPerPage).Take(ItemsPerPage)在哪裏PageNumber和ItemsPerPage被傳入 –

+0

嗨,John,對不起,我正在使用一個名爲實體空間的實體框架。 –

+1

我不打擾優化分頁 - 我寧願尋求實現良好的搜索/過濾選項。沒有人真的想要瀏覽超過5頁的結果。 – Filburt

回答

1

通過使用SQL Server 2005提供的新函數ROW_NUMBER(),您可以獲得帶有行號的結果集。此行號可用於在數據庫端進行分頁。

CREATE PROCEDURE [dbo].[getcust] 
    @PageIndex INT, 
    @PageSize INT, 
    @Searchkey VARCHAR(255), 
    @TotalRecords int OUTPUT 
    AS 
IF EXISTS(SELECT * FROM tbcustomer WHERE cust_firstname= @Searchkey) 
BEGIN 

    SELECT @TotalRecords =count(*) FROM tbcustomer WHERE cust_firstname= @Searchkey; 

    WITH customer AS ( 
    SELECT ROW_NUMBER() OVER (ORDER BY cust_firstname ASC) AS Row, 
     cust_id, cust_firstname,address,phone 
    FROM tbcustomer WHERE cust_firstname= @searchkey 
) 
    SELECT cust_id,cust_firstname,address,phone FROM customer 
    WHERE Row between (@PageIndex - 1) * @PageSize + 1 and @PageIndex*@PageSize 


END