码迷,mamicode.com
首页 > 数据库 > 详细

数据库分页

时间:2018-08-27 18:22:25      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:serve   索引   条目   inf   span   style   img   color   原因   

1、SQL server

现在常用的是:

row_number()

--例如page=1,limit=10
--     // 开始索引
--  int start = (page - 1) * limit + 1;//(1)为2是结果为(11)
--// 结束索引
--int end = page * limit;//(10)为2是结果为(20)
select * from(select *, ROW_NUMBER() over (order by p.id desc) row from product p ) c 

where c.row>=start and c.row<=end

2、Mysql

---语句样式: MySQL中,可用如下方法:

SELECT * FROM 表名称 WHERE id_pk > (pageNum*10) ORDER BY id_pk ASC LIMIT M
---适应场景: 适用于数据量多的情况(元组数上万). 最好ORDER BY后的列对象是主键或唯一所以,

使得ORDERBY操作能利用索引被消除但结果集是稳定的(稳定的含义,参见方法1)
---原因: 索引扫描,速度会很快.

但MySQL的排序操作,只有ASC没有DESC(DESC是假的,未来会做真正的DESC,期待...).

方式 1、limit m语句:

select * from product where id>(1*3) ORDER BY id ASC LIMIT 1
#通过ID查找 LIMIT M 后面参数是显示条数 

技术分享图片

方式 2、limit m,m语句:

 

select * from product order by id desc limit 4,2;
#问题多 数据多的时候 效率十分低下 满足(4+2)后面的参数是返回条数

 方式 3、 优化方式1

例如:每页10条数据,当前是第10页,当前条目ID的最大值是109,最小值是100.
那么跳到第9页:
select * from dept where deptno<100 order by desc limit 0,10;

那么跳到第8页:
select * from dept where deptno<100 order by desc limit 10,10;

那么跳到第11页:
select * from dept where deptno>109 order by asc limit 0,10;

那么跳到第11页:
select * from dept where deptno>109 order by asc limit 10,10;

 

数据库分页

标签:serve   索引   条目   inf   span   style   img   color   原因   

原文地址:https://www.cnblogs.com/dzcici/p/9542513.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!