2010-01-08 4 views
1

나는 적어도 30,000 개의 레코드를 sqlserver 테이블의 gridview에 바인딩하고 싶다. 격자보기로 한 번에 50 개의 레코드 만 바인딩하려고합니다. 그리드에는 페이징이 있으며 다음 페이지를 클릭하면 다음 50 개의 레코드가 표시되고 다른 다음 페이지의 다른 50 개의 레코드가 클릭됩니다.그리드 뷰에서 들어오는 레코드를 어떻게 최적화 할 수 있습니까?

이 문제를 어떻게 최적화 할 수 있습니까? 30,000 개의 레코드가 바인딩되어 있다면 그리드는 바인딩 된 50 개의 레코드로 작동해야합니다.

감사합니다.

+1

Deepak의 도움을받을 수 있습니다. 다른 질문이 6 개 있지만 그 중 하나에 대한 대답을 수락하지 않은 이유는 무엇입니까? – Tarydon

+0

@Henk : oosp, 죄송합니다! –

+0

왜 더 이상 최적화하고 싶습니까? 페치 및 표시를 최적화하는 페이징 메커니즘을 이미 사용하고 있습니다. – A9S6

답변

0

SQL 서버에서 페이징을 처리하는 것이 더 효율적입니다. Gridview에서 페이징을 처리하거나 로컬에서 실행중인 데이터 소스를 처리하는 경우 데이터베이스에서 프런트 엔드에 30,000 개의 레코드를 모두로드 한 다음 해당 페이지의 레코드를 검색합니다.

0

GridView를 LinqDataSource 컨트롤에 바인딩 할 수 있습니다. 내가 알기로 페이징을 처리 할 때 전체 테이블이 아닌 데이터베이스에서 보이는 행만 요청합니다. GridView를 LinqDataSource here에 바인딩하는 방법에 대한 좋은 기사가 있습니다.

1

GridViewObjectDataSource에 바인드하고 둘 다에서 페이징을 활성화하십시오.

SQL 측에서 CTE를 사용하여 필요한 행을 선택하십시오. 예를 들어 : Ultra-Fast ASP.NET :이 도움이 경우

;WITH MyCTE ([row], [Item]) AS (
    SELECT ROW_NUMBER() OVER (ORDER BY Id) [row], [Item] 
     FROM SourceTable 
    ) 
    SELECT [row], [Item] 
     FROM MyCTE 
     WHERE [row] BETWEEN @startrow AND @startrow + @pagesize - 1 

, 나는 비동기 I/O를 사용하여 코드를 포함, 내 책에서이 작업을 수행하는 방법에 대한 완전한 고성능의 예를 제공합니다.

1

다른 제안에 따라 여러 가지 방법이 있습니다. 나는 몇 가지 더 추가 할 것이라고

A) 이것은 당신이 후에 .NET 버전 3.0 이상을 사용하는 경우 내가) 내 현재 프로젝트에

--Usage : USP_DataListing 0,12 
ALTER PROCEDURE [dbo].[USP_DataListing] 
    -- Add the parameters for the stored procedure here 
    (@StartIndex INT, @ItemsToDisplay INT) 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    DECLARE @EndIndex INT 
    SET @StartIndex = @StartIndex * @ItemsToDisplay 
    SET @EndIndex = @StartIndex + @ItemsToDisplay 

    BEGIN 
     SELECT 
      SlNo 
      ,Column(s) 
      FROM (
     SELECT 
     ROW_NUMBER() OVER (ORDER BY GETDATE() DESC) AS SlNo 
       ,i.Column(s)     
      FROM dbo.tblName i)X 
      WHERE X.SlNo BETWEEN @StartIndex+1 AND @EndIndex 
    END 

2)를하고있는 중이 야 어떻게 (백엔드에서 처리 linq의 Take() and Skip() 방법

관련 문제