以块的形式从大表中获取数据

时间:2014-05-30 10:56:01

标签: sql-server performance

我有一张拥有数百万条记录的大桌子。我在我的应用程序中将此表绑定到gridview。由于数据很大,我们使用分页概念检索数据。就像我将gridview页面大小设置为2000,然后我从表中只获取2000条记录。我正在使用以下查询

Select * from (select *, Row_Number() over (order by id) as Row_Index) a 
where
Row_Index > @start_index and Row_Index < @End_Index

此查询快速运行前几百万条记录,但随着开始和结束索引的增加,性能会急剧下降。我该如何改进此查询

2 个答案:

答案 0 :(得分:2)

使您的唯一列成为索引(非群集的群集),就像表中的ID列一样,如果它没有重复,则是一个很好的候选者。

或添加自动增加的列ID。

您也可以使用此类查询

Select  top 2000 *
from    t
where ID >= @start_index
order by ID

答案 1 :(得分:0)

DECLARE @From  int ,@Thru  int

--  Example here would be the second set
SET @From = 1
SET @Thru = 1000

SELECT <columns>
 from (select <columns>, row_number() over (order by <PrimaryKey>) Ranking
        from MyTable) xx
 where Ranking between @From and @Thru