我有一张拥有数百万条记录的大桌子。我在我的应用程序中将此表绑定到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
此查询快速运行前几百万条记录,但随着开始和结束索引的增加,性能会急剧下降。我该如何改进此查询
答案 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