求一个分页SQL语句,要求不占用服务器内存的!
发布网友
发布时间:2022-04-08 05:42
我来回答
共2个回答
热心网友
时间:2022-04-08 07:11
1.分页方案一:(利用Not In和SELECT TOP分页)
语句形式:
SELECTTOP10*
FROMTestTable
WHERE(IDNOTIN
(SELECTTOP20id
FROMTestTable
ORDERBYid))
ORDERBYID
SELECTTOP页大小*
FROMTestTable
WHERE(IDNOTIN
(SELECTTOP页大小*页数id
FROM表
ORDERBYid))
ORDERBYID
2.分页方案二:(利用ID大于多少和SELECT TOP分页)
语句形式:
SELECTTOP10*
FROMTestTable
WHERE(ID>
(SELECTMAX(id)
FROM(SELECTTOP20id
FROMTestTable
ORDERBYid)AST))
ORDERBYID
SELECTTOP页大小*
FROMTestTable
WHERE(ID>
(SELECTMAX(id)
FROM(SELECTTOP页大小*页数id
FROM表
ORDERBYid)AST))
ORDERBYID
3.分页方案三:(利用SQL的游标存储过程分页)
create procereSqlPager
@sqlstrnvarchar(4000),--查询字符串
@currentpageint,--第N页
@pagesizeint--每页行数
as
setnocounton
declare@P1int,--P1是游标的id
@rowcountint
execsp_cursoropen@P1output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcountoutput
selectceiling(1.0*@rowcount/@pagesize)as总页数--,@rowcountas总行数,@currentpageas当前页
set@currentpage=(@currentpage-1)*@pagesize+1
execsp_cursorfetch@P1,16,@currentpage,@pagesize
execsp_cursorclose@P1
setnocountoff
其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。
建议优化的时候,加上主键和索引,查询效率会提高。
通过SQL 查询分析器,显示比较:我的结论是:
分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句
分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句
分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用
热心网友
时间:2022-04-08 08:29
select top everypage *from student where stu_id not in(select top(nowpage-1)*everypage stu_id from student)
本语句关键点:
everypage:指的是分页是每页显示的信息数
nowpage:指的是当前显示的是第几页
比如:
select top 10 *from student where stu_id not in(select top(2-1)*10 stu_id from student)
的意思是从学生表中查找出第二页显示的学生的信息(每页显示10条学生信息)
本人觉得此语句不太占用服务器内存,因为每次请求只是查找了数据库中表的一部分而已!
求一个分页SQL语句,要求不占用服务器内存的!
分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句 分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用
求一个分页SQL语句,要求不占用服务器内存的!
select top 10 * from 表 where 表.ID not in (select 表. top (当前页-1)*10 ID from 表 )
请问,如何用一条SQL查询出分页的数据和总记录数啊?MySQL的!不用存储
的确要查询两次的,因为计算总记录数是使用的聚合函数count(),如果你想一起查询出来,就要使用分组,那样也麻烦,对数据库的操作要使用细粒度的操作,可以使用事务来控制两次查询,用同一个connection,这样可以避免两次查询导致两次不同进程之间的连接操作 ...
sql数据库分页(数据库分页查询sql语句)
sql中的10表示你每页显示的数据,这里跟10,就代表每页显示10条。(你可以定义一个常量作为每页显示的条数)where中的20表示不包括前面的20条数据,也就是查询出从第21条到30之间的数据。不知道我这样说你是否理解,其实只要理解了sql语句,分页就很好做了。
如何用sql语句 实现分页查询?
方法1:适用于 SQL Server 2000/2005 SELECT TOP 页大小 FROM table1 WHERE id NOT IN (SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id )ORDER BY id 方法2:适用于 SQL Server 2000/2005 SELECT TOP 页大小 FROM table1 WHERE id > (SELECT ISNULL(MAX(id),0)FROM (SELECT ...
一条sql语句实现分页查询,且能返回记录总数
可以是可以,不过土了点,用个子查询。select top 10 *,(select count(1) from table) as cnt from table where id not in ..这样有一个问题。就是你查询出来的每条记录里,都带一个总行数。
SQL语句分页存储过程错误求指导?
第一行if exists (select* from sysobjects where name='MyBlog_Pageing')select与*之间加个空格 if exists (select * from sysobjects where name='MyBlog_Pageing')set @sql='select top'+CAST(@pageSize as varchar) +' * from 'top后面也应该有个空格 set @sql='select top '+CAST(@...
如何使用mybatis实现分页
1. 编写SQL语句:在MyBatis的映射文件中,编写带有LIMIT和OFFSET关键字的SQL查询语句来实现分页。LIMIT用于限制返回的记录数,OFFSET用于指定从哪一条记录开始返回。2. 传递参数:在执行查询时,需要传递页码和每页的记录数这两个参数,这些参数将在SQL语句中替换为实际的数值。3. 使用MyBatis的映射文件...
SQLserver 两表关联查询分页,求大神帮写下SQL语句
--授之以渔--方法 1: 此方法适用于 SQL Server 2000/2005/2008 -- Pager the record -- Note: N 代表要求查询的第 n 页的记录,X 表示每一页有 x 条记录。 select top X * from tb where pk_col not in (select top (N-1)*X pk_col from tb) -- Demo select top 10 *...
求一个SQL排序语句。
1.select t2.* from t2 inner join (select t2ID,count(t2ID) c from t1 group by t2ID order by c desc) tt on t2.id=tt.t2id order by tt.t2id 2.declare @firstrow int,@lastrow int select @firstrow=(@页数-1)*@每页记录数+1,@lastrow=@页数*@每页记录数 select row_...