分页查询,分页查询应用场景当要查询的条目数太多,一页显示不全

http://www.itjxue.com  2023-01-05 12:41  来源:未知  点击次数: 

如何用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 TOP 页大小*(页数-1) id FROM table1 ORDER BY id

) A

)

ORDER BY id

方法3:

适用于 SQL Server 2005

SELECT TOP 页大小 *

FROM

(

SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1

) A

WHERE RowNumber 页大小*(页数-1)

怎样实现数据库的分页查询

针对查询语句做处理,同时对请求页面地址做分析

list.aspx?pageid=5 //表示访问第五页

后台语言里,先对查询条件做预处理

pagepre=pagesize*4 //pagesize 用于表示分页大小,例如10,则前4页共有40条记录

查询语句

sqlcmd="select top "+pagesize+" from tabelname where id not in (select top "+pagepre+" from tablename order by id desc)"

操作原理为将当前页前显示的所有记录从数据查询结果中排除,也就是not in 后面的部分,然后从剩余的结果冲,读取pagesize大小的记录值。筛选条件、排序条件放在子查询中

java分页查询

intPageCount = (intRowCount+intPageSize-1) / intPageSize;等价于

intPageCount=(intRowCount-1/intPageSiez)+1;

如果introwCount(总记录)=8,intPageSize(每页记录)=8则共为1页,如果rowCount=14,inPageSize=8则为2页,就是说总页数至少是要比8的倍数多1才会多翻一页.你想想如果一页显示八个记录,而总数刚好最后页有8个记录,你会翻页吗,不会的吧!!就这个道理

其实可以用为intPageCount=intRowCount%intPageSize==0?(intRowCount)/intPageSize:(intRowCount/intPageSize+1);

假设rowCount(总记录数)=8 intPageSize(每页记录数)=8,那么总页数就是因为8%8==0则8/8=1

就是一页

假设rowCount=14 intPageSize=8则总页数就是因为14%8!=0则14/8+1=2

就是两页这样分析楼主不知道能否明白

MySql中查询语句实现分页功能,其中pageNow代表当前是第几页?

pageNow代表当前页面,第一页。

第一部分:看一下分页的基本原理:

对上面的mysql语句说明:limit 10000,20的意思扫描满足条件的10020行,扔掉前面的10000行,返回最后的20行,问题就在这里,如果是limit 100000,100,需要扫描100100行,在一个高并发的应用里,每次查询需要扫描超过10W行,性能肯定大打折扣。文中还提到limit n性能是没问题的,因为只扫描n行。

第二部分:根据雅虎的几位工程师带来了一篇Efficient Pagination Using MySQL的报告内容扩展:在文中提到一种clue的做法,给翻页提供一些线索,比如还是SELECT * FROM message ORDER BY id DESC,按id降序分页,每页20条,当前是第10页,当前页条目id最大的是1020,最小的是1000,如果我们只提供上一页、下一页这样的跳转(不提供到第N页的跳转),那么在处理上一页的时候SQL语句可以是:

处理下一页的时候SQL语句可以是:

不管翻多少页,每次查询只扫描20行。

缺点是只能提供上一页、下一页的链接形式,但是我们的产品经理非常喜欢“上一页 1 2 3 4 5 6 7 8 9 下一页”这样的链接方式,怎么办呢?

如果LIMIT m,n不可避免的话,要优化效率,只有尽可能的让m小一下,我们扩展前面的clue做法,还是SELECT * FROM message ORDER BY id DESC,按id降序分页,每页20条,当前是第10页,当前页条目id最大的是2519,最小的是2500;

当是第10页的SQL如下:

比如要跳到第9页,SQL语句可以这样写:

比如要跳到第8页,SQL语句可以这样写:

原理还是一样,记录住当前页id的最大值和最小值,计算跳转页面和当前页相对偏移,由于页面相近,这个偏移量不会很大,这样的话m值相对较小,大大减少扫描的行数。其实传统的limit m,n,相对的偏移一直是第一页,这样的话越翻到后面,效率越差,而上面给出的方法就没有这样的问题。

(责任编辑:IT教学网)

更多

推荐3DMAX教程文章