怎么建设游戏网站,论述网站推广的方法与技巧,秀米同步到Wordpress,深圳珠宝网站建设分析报告Java面试#xff1a;mysql与oracle分页的有什么区别 相信许多人在日常工作中都会用到分页#xff0c;比如日常查询数据量太大#xff0c;而我们只需要其中的几条即可#xff0c;所以这时就会去使用分页去查询#xff0c;今天主要就mysql与oracle的分页进行分析。 MySQL 分…Java面试mysql与oracle分页的有什么区别 相信许多人在日常工作中都会用到分页比如日常查询数据量太大而我们只需要其中的几条即可所以这时就会去使用分页去查询今天主要就mysql与oracle的分页进行分析。 MySQL 分页语句简单的写法 select * from table limit m,n; // m (startPage-1)*pageSize, n pageSizeOracle 分页语句简单的写法 select * from table where rownum a;从上面的sql中我们可以看出两者的写法区别首先mysql分页用limit而oracle是用rownum当然我上面所写的sql仅仅只能满足于随机拿取几条数据的情况下面我们开始今天的正题如何两种数据库的分页。
首先我们来讲解mysql的写法 SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 可以接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数第一个参数指定第一个返回记录行的偏移量第二个参数指定返回记录行的最大数目初始记录行的偏移量是 0(而不是 1)。 - 示例 select * from book limit 2,5; // 从第三条数据开始拿取5条数据select* from book limit 5; // 获取前5行数据接下来看看oracle的分页写法 select * from book where rownum count; //count 代表需要获取的行数/** 符号使用 , , ,*/- 示例 select * from book where rownum 10;//获取0-10之间的数据共9行select * from (select rownum rn,A.* from book A)where rn5 and rn20; //获取6-20行的数据不包含第20行select * from (select rownum rn , A.* from book A where rownum 100 )where rn 50; //获取51-100的数据不包含100行注意此种写法不可用于含有分组查询的时候对比这三种写法绝大多数的情况下第一个只是拿取数据给定的前几条数据第二个查询和第三个查询是给定一个查询范围且第三个查询的效率比第二个高得多。
这 是由于CBO优化模式下Oracle可以将外层的查询条件推到内层查询中以提高内层查询的执行效率。对于第三个查询语句第一层的查询条件WHERE ROWNUM 100就可以被Oracle推入到内层查询中这样Oracle查询的结果一旦超过了ROWNUM限制条件就终止查询将结果返回了。
而 第二个查询语句由于查询条件BETWEEN 5 AND 20是存在于查询的第二层而Oracle无法将第二层的查询条件推到最内层即使推到最内层也没有意义因为最内层查询不知道RN代表什么。因此对 于第二个查询语句Oracle最内层返回给中间层的是所有满足条件的数据而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成显然这个效率 要比第一个查询低得多。
上面分析的查询不仅仅是针对单表的简单查询对于最内层查询是复杂的多表联合查询或最内层查询包含排序的情况一样有效。