您的位置:首页 > 数据库

数据库分页查询SQL

2017-09-07 14:16 141 查看
总结一下关于oracle和mysql的分页查询语句

1:mysql分页查询

mysql的分页查询是最简单的,借助关键字limit即可实现查询,查询语句通式:

/*
* sql:可以是单表的查询语句,也可以是多表的联合查询语句
* firstIndex:起始的索引
* pageSize:每页显示的记录数
*/
select o.* from (sql) o limit firstIndex,pageSize


2:oracle分页查询

oracle的分页查询方法相对来说要多点,主要介绍俩种查询方式:ROWNUM、row_number()

①ROWNUM查询分页通式:

/*
* firstIndex:起始索引
* pageSize:每页显示的数量
* sql:可以是简单的单表查询语句,也可以是复杂的多表联合查询语句
*/
select * from(select a.*,ROWNUM rn from(sql) a where ROWNUM<=(firstIndex+pageSize)) where rn>firstIndex




②row_number()解析函数分页查询通式:
/*
* firstIndex:起始索引
* pageSize:每页显示的数量
* orderColumn:排序的字段名
* sql:可以是简单的单表查询语句,也可以是复杂的多表联合查询语句
*/
select * from(select * from(select t.*,row_number() over(order by orderColumn) as rownumber from(sql) t) p
where p.rownumber>firstIndex) where rownum<=pageSize



对于oracle的分页查询,特地选出这两种实现方式是因为这两者各有千秋《转》

首先, 我们知道在ROWNUM查询的方式中,在第二层的sql语句中有个"where ROWNUM<firstIndex+pageSize",根据oracle的原则,第二层查询语句会嵌入到最内层中进行查询,也就是说,最开始执行的查询语句类似于:select * from wyuse where rownum<(firstIndex+pageSize) order by id asc,从数据表中查询出(firstIndex+pageSize)条记录,所以如果这个值很小的话,效率会很好,如果对于大数据量的表单,这个值如果是上千,比如:select
* from wyuse where rownum<(5000) order by id asc,这样一开始会选出5000条记录,效率自然会慢很多....

不过,相对于ROWNUM,row_number()方式可能通过简化可以少一层嵌套,不过貌似对于大数量
4000
的查询,效率也高不到哪里去.....不过,对于大数量如果为表建立索引再结合row_number()效果会很好(未测试)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: