
四种方式实现SQLServer 分页查询
SQLServer 的数据分页:
假设现在有这样的一张表:
CREATE TABLE test
(
id int primary key not null identity,
names varchar(20)
)
然后向里面插入大约1000条数据,进行分页测试
假设页数是10,现在要拿出第5页的内容,查询语句如下:
--10代表分页的大小
select top 10
from test
where id not in
(
--40是这么计算出来的:10(5-1)
select top 40 id from test order by id
)
order by id
原理:需要拿出数据库的第5页,就是40-50条记录。首先拿出数据库中的前40条记录的id值,然后再拿出剩余部分的前10条元素
第二种方法:
还是以上面的结果为例,采用另外的一种方法
--数据的意思和上面提及的一样
select top 10
from test
where id >
(
select isnull(max(id),0)
from
(
select top 40 id from test order by id
) A
)
order by id
原理:先查询前40条记录,然后获得其最id值,如果id值为null的,那么就返回0
然后查询id值大于前40条记录的最大id值的记录。
这个查询有一个条件,就是id必须是int类型的。
第三种方法:
select top 10
from
(
select row_number() over(order by id) as rownumber, from test
) A
where rownumber > 40
原理:先把表中的所有数据都按照一个rowNumber进行排序,然后查询rownuber大于40的前十条记录
这种方法和oracle中的一种分页方式类似,不过只支持2005版本以上的
第四种:
存储过程查询
创建存储过程
alter procedure pageDemo
@pageSize int,
@page int
AS
declare @temp int
set @temp=@pageSize(@page - 1)
begin
select top (select @pageSize) from test where id not in (select top (select @temp) id from test) order by id
end
执行存储过程
exec 10,5
一般的分页查询使用简单得很LIMIT子句即可实现
SELECT FROM 表名 LIMIT [offset,] rows
如果偏移量一定,返回记录数对对执行时间有什么影响?
记录数在100以内是,差异不明显,超过100以后会随着记录数增加而增加。
如果查询记录数一定,偏移量的变化会对性能有什么影响?
LIMIT 1000,100
LIMIT 100000,100
偏移量在100以内,差异不明显,超过100以后随着偏移量的增加所需时间会快速上升
无论是否使用LIMIT,偏移量参数。。。内部都是从第一条开始进行扫描,然后丢弃掉前面部分的数据
不使用SELECT ,而是查询具体字段,这样可以省去回表的时间
SELECT FROM STUDENT WHERE ID >=10000 LIMIT 100
但是这样存在一个问题,第一万条数据的ID经过多次维护很可能已经不是10000了
SELECT FROM STUDENT WHERE ID >= (SELECT ID FROM STUDENT LIMIT 1000,1) LIMIT 100
在子查询中,即使用了覆盖索引,又尽可能减小了数据行数。
除了使用子查询,也可以在查询之后保留当前页的最大值,这样读取下一页时可以直接使用,但是这只限于下一页的情况。
对于深度分页,例如一共有10000页,突然从第5页跳转到最后一页,或者指定跳转到8888页。
limit是mysql的语法
select from table limit m,n
其中m是指记录开始的index,从0开始,表示第一条记录
n是指从第m+1条开始,取n条。
select from tablename limit 15,15
即取出第16条至第30条,15条记录
格式:select from 表 limit index,n 其中index是第几条,n显示多少条;
select from 表 limit 0,20 其实就做到分页显示了,意思是从第1条开始取20条,点下一页你修改select from 表 limit 19,20这就是第二页了,也显示20条
limit 第一个参数是查询的 开始位置,第二个是查询的行数,跟数值大小没关系,如果你的查询慢,因该检查 表是否有索引,而且 like 查询 在大数据中很影响性能,一般like语句会造成全表扫描
选择astudentname,azhengpic,bgetbookdate的BookInfo为B,BOOKTYPE的作为,aid = bstudentid bid = cid作为一个从studentinfo,
以上就是关于sql server 求和后如何分页请看SQL语句全部的内容,包括:sql server 求和后如何分页请看SQL语句、关于分页查询(MarkDown格式)、Mysql中limit的用法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)