Gui*_*ira 11 c# sql pagination visual-studio-2010 sql-server-2008
我有一个包含200多万条记录的数据库,我需要在我的网络应用程序上执行分页,每页必须有10条记录DataGrid.
我已经尝试使用ROW_NUMBER(),但这种方式将选择所有200万条记录,然后只获得10条记录.我也尝试使用TOP 10,但我必须保存第一个和最后一个id来控制页面.我已经读过,使用DataAdapter.Fill()将选择所有内容,然后获得我需要的10条记录.
哪种方式最好?我应该用DataAdapter.Fill()吗?或者使用SQL Server的功能ROW_NUMBER()?或尝试使用TOP 10?
ALTER PROCEDURE [dbo].[SP_tblTest_SelectSpecificRecordsWithCTE]
@FromRow int = 1000000,
@PgSize int = 10
AS
BEGIN
;WITH RecordsRN AS
(
select ID, colValue, ROW_NUMBER() over(order by colvalue) as Num from tblTest
)
SELECT ID Value, colValue Text FROM RecordsRN WHERE Num between @FromRow AND (@FromRow+@PgSize-1)
END
Run Code Online (Sandbox Code Playgroud)
那是我用于分页的查询。使用它,您将在4-5秒内获得所需的10条记录。我在3秒内获得10条记录,我的数据库中的总记录为1000万,请勿使用前10条记录,每次只会带来相同的10条记录。就我而言,我在会话中保持页面大小和起始行号(@FromRow),并将这两个值传递给下面的给定存储过程并获得结果。此外,如果您使用的是SQL 2012,则可能要使用OFFSET和Fetch接下来的10行。在Google上搜索有关OFFSET关键字的信息,您将在顶部看到所需的结果。
谢谢
| 归档时间: |
|
| 查看次数: |
11035 次 |
| 最近记录: |