2012-06-05 3 views
0

У меня есть база данных, состоящая из тысяч продуктов, и я запрашиваю ее, чтобы отбросить большой набор данных каждый раз, когда выполняется другой запрос. Я беспокоюсь, что, как только проект выйдет вживую, и все больше и больше людей начнут попадать на сайт, эта производительность будет хитом. Я не могу увеличить мощность сервера, поэтому мне бы понравилось решение, которое могло бы спасти меня от хлопот по дороге. Есть ли способ просто загружать наборы в sql-запрос?Paged ASP.NET ретранслятор

select top 20 where xxx 
select next 20 

Я не уверен.

+1

Необходимо предоставить более подробную информацию о стратегии доступа к данным. Если вы используете LINQ, вы всегда можете использовать .Products.Skip (PageNumber * ItemsPerPage) .Take (ItemsPerPage), где PageNumber и ItemsPerPage передаются в –

+0

Привет, Джон, извините, я использую инфраструктуру Entity, называемую сущностью. –

+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 
Смежные вопросы