这篇文章将为大家详细讲解有关sqlserver中怎么处理分页查询,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

top方案:

sql code:

selecttop10*fromtable1whereidnotin(selecttop开始的位置idfromtable1)

max:

sql code:

selecttop10*fromtable1whereid>(selectmax(id)from(selecttop开始位置idfromtable1orderbyid)tt)

row:

sql code:

select*from(selectrow_number()over(orderbytempcolumn)temprownumber,*from(selecttop开始位置+10tempcolumn=0,*fromtable1)t)ttwheretemprownumber>开始位置

3种分页方式,分别是max方案,top方案,row方案

效率:

第1:row

第2:max

第3:top

缺点:

max:必须用户编写复杂sql,不支持非唯一列排序

top:必须用户编写复杂sql,不支持复合主键

row:不支持sqlserver2000

测试数据:

共320万条数据,每页显示10条数据,分别测试了2万页、15万页和32万页。

页码,top方案,max方案,row方案

2万,60ms,46ms,33ms15万,453ms,343ms,310ms32万,953ms,720ms,686ms

是一种通过程序拼接sql语句的分页方案,

用户提过的sql语句不需要编写复杂的sql逻辑

诺用户提供sql如下

sql code

select*fromtable1

从第5条开始,查询5条,处理后sql变为

sql code

select*from(selectrow_number()over(orderbytempcolumn)temprownumber,*from(selecttop10tempcolumn=0,*fromtable1)t)ttwheretemprownumber>5

这是什么意思呢?分解一下

首先将用户输入的sql语句转稍稍修改

在select后添加top 开始位置+条数变成

再外加一列tempcolum,变成这样

sql code

selecttop20tempcolumn=0,*fromclazz

嵌套一层,这样便可查询出行号

刚才那个列就是用来这里order by用的

(也不知道sqlserver的row_number函数为什么必须要order by)

sql code

selectrow_number()over(orderbytempcolumn)temprownumber,*from(修改过的查询)t

再套一层,过滤掉行号小于开始位置的行

sql code

select*from(第二层)ttwheretemprownumber>10

关于sqlserver中怎么处理分页查询就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。