mysql 与 Oracle 分页方法的对比总结
来源:互联网 发布:淘宝购物怎么走返利 编辑:程序博客网 时间:2024/05/16 07:37
分页 在开发中 很常见,但是oracle 与 MySQL 的 分页方法 是不同的,所以在此处记录一下
mysql:
一:分页需求:
客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的需求不一样,所以就需要我们根据实际情况去改写适合我们自己的分页语句,具体的分析如下:
比如:
查询第1条到第10条的数据的sql是:select * from table limit 0,10; ->对应我们的需求就是查询第一页的数据:select * from table limit (1-1)*10,10;
查询第10条到第20条的数据的sql是:select * from table limit 10,20; ->对应我们的需求就是查询第二页的数据:select * from table limit (2-1)*10,10;
查询第20条到第30条的数据的sql是:select * from table limit 20,30; ->对应我们的需求就是查询第三页的数据:select * from table limit (3-1)*10,10;
二:通过上面的分析,可以得出符合我们自己需求的分页sql格式是:select * from table limit (start-1)*limit,limit; 其中start是页码,limit是每页显示的条数。
Oracle:子查询
Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看。
Oracle分页查询语句基本上可以按照本文给出的格式来进行套用。
Oracle分分页查询格式:
SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >= 21
其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句。ROWNUM <= 40和RN >= 21控制分页查询的每页的范围。
上面给出的这个Oracle分分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。在上面的分页查询语句中,这种考虑主要体现在WHERE ROWNUM <= 40这句上。
选择第21到40条记录存在两种方法,一种是上面例子中展示的在查询的第二层通过ROWNUM <= 40来控制最大值,在查询的最外层控制最小值。而另一种方式是去掉查询第二层的WHERE ROWNUM <= 40语句,在查询的最外层控制分页的最小值和最大值。查询语句如下:
SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A ) WHERE RN BETWEEN 21 AND 40
对比这两种写法,绝大多数的情况下,第一个查询的效率比第二个高得多。
这是由于CBO 优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于第一个查询语句,第二层的查询条件WHERE ROWNUM <= 40就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。
而第二个查询语句,由于查询条件BETWEEN 21 AND 40是存在于查询的第三层,而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也没有意义,因为最内层查询不知道RN代表什么)。因此,对于第二个查询语句,Oracle最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,显然这个效率要比第一个查询低得多。
上面分析的查询不仅仅是针对单表的简单查询,对于最内层查询是复杂的多表联合查询或最内层查询包含排序的情况一样有效。
分页计算方式:
//page是页数,rows是显示行数 int page=2; int rows=5; List<Articles> list=a.select(page*rows+1,(page-1)*rows); // sql语句: select * from(select a.*,rownum rn from (select * from t_articles) a where rownum < 11) where rn>5
//第一个参数,对应着第一个rownum<11,第二个参数对应着rn>5
- mysql 与 Oracle 分页方法的对比总结
- mysql与oracle的对比
- SQLSERVER,ORACLE,MYSQL的分页与java连接字符串总结
- MySQL与Oracle的分页
- oracle与mysql的分页
- 【分页】---mysql与oracle的分页
- Oracle与MySQl对比
- MySQL与Oracle的语法区别对比
- Mysql的坑--与Oracle对比
- mysql与oracle的语法对比
- mysql分页与oracle分页
- MySQL与Oracle的分页查询语句
- Oracle分页以及与MySql的比较
- 小结oracle与mysql的分页
- mysql与oracle的分页语句
- 总结一些分页查询的方法SQL server,MySQL,oracle数据库及hibernate中
- mybatis的分页插件pagehelper-fix使用、数据库分页查询模板sql、总结mysql与oracle语句的区别
- 总结Oracle,MySql,SQLServer的分页查询总结
- 学习springmvc的第四天(准备springmvc环境)
- EOJ------丽娃河的狼人传说
- SQLSTATE[42S22]: Column not found: 1054 Unknown column 'staff_info.depart_id' in 'where clause'
- 刘轩-心理学-十点课-如何克服拖延症
- 字符串替换
- mysql 与 Oracle 分页方法的对比总结
- 刘轩-别让偏见讯息左右你
- 二分查找各种情况大总结
- S3c2440A平台HIVE注册表+binfs的实现
- 进程通信
- vue2.0中过滤器的使用
- 入参校验工具
- 河南省第十届ACM省赛题目:问题 C: 最小秘钥
- 刘轩-心理课堂-五个赢得社交正面评价的秘诀