mysql与oracle分页的有什么区别

Java面试:mysql与oracle分页的有什么区别

相信许多人在日常工作中都会用到分页,比如日常查询数据量太大,而我们只需要其中的几条即可,所以这时就会去使用分页去查询,今天主要就mysql与oracle的分页进行分析。

  • MySQL 分页语句简单的写法:

    复制代码
      select * from table limit m,n;  // m = (startPage-1)*pageSize, n = pageSize
  • Oracle 分页语句简单的写法:

    复制代码
      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 rn>5 and  rn<20;    //获取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最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,显然这个效率 要比第一个查询低得多。

上面分析的查询不仅仅是针对单表的简单查询,对于最内层查询是复杂的多表联合查询或最内层查询包含排序的情况一样有效。

相关推荐
代码探秘者1 分钟前
【Java集合】ArrayList :底层原理、数组互转与扩容计算
java·开发语言·jvm·数据库·后端·python·算法
寻见9032 分钟前
10 分钟吃透 MyBatis 核心|从底层原理到实战技巧,Java 开发者必藏(无废话干货)
java·mysql·mybatis
末点20 分钟前
超长文本格式坐标串数据空间化入库
数据库·c#·st_geomfromtext
七七powerful29 分钟前
养龙虾-在 Grafana 中获取 API Token 的方法
数据库
阿坤带你走近大数据35 分钟前
Oracle存储过程怎么写
数据库·oracle·存储过程
搜佛说1 小时前
第2章-EdgeX-Foundry架构深度解析
数据库·物联网·架构·边缘计算·iot
知识分享小能手1 小时前
PostgreSQL 入门学习教程,从入门到精通,PostgreSQL 16 服务器配置与数据库监控终极指南 —语法、案例与实战(18)
数据库·学习·postgresql
珠海西格电力1 小时前
零碳园区全面感知体系的建设成本和收益分析包含哪些关键数据?
大数据·数据库·人工智能·智慧城市·能源
天空属于哈夫克31 小时前
私域自动化:构建企业微信全链路无人值守运营体系
数据库
wangjinxun1 小时前
【MySQL】深度学习数据库开发技术:使用CC++语言访问数据库
数据库·mysql·数据库开发