iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >oracle、mysql 分页查询比较
  • 198
分享到

oracle、mysql 分页查询比较

oracle数据库 2023-09-20 22:09:47 198人浏览 安东尼
摘要

1、 Oracle的分页查询语句 分页查询格式: SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE RO

1、 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控制分页查询的每页的范围。

上面给出的这个分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。在上面的分页查询语句中,这种考虑主要体现在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最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,显然这个效率要比第一个查询低得多。

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

下面简单讨论一下多表联合的情况。对于最常见的等值表连接查询,CBO一般可能会采用两种连接方式NESTED LOOP和HASH JOIN(MERGE JOIN效率比HASH JOIN效率低,一般CBO不会考虑)。在这里,由于使用了分页,因此指定了一个返回的最大记录数,NESTED LOOP在返回记录数超过最大值时可以马上停止并将结果返回给中间层,而HASH JOIN必须处理完所有结果集(MERGE JOIN也是)。那么在大部分的情况下,对于分页查询选择NESTED LOOP作为查询的连接方法具有较高的效率(分页查询的时候绝大部分的情况是查询前几页的数据,越靠后面的页数访问几率越小)。

因此,如果不介意在系统中使用HINT的话,可以将分页的查询语句改写为:

SELECT  * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40)WHERE RN >= 21

复制

2、 MySQL的分页查询语句

PHPMyAdmin里执行如下sql

SELECT* FROM `cdb_posts` WHERE pid >= (     SELECT pid FROM `cdb_posts` ORDERBY pid LIMIT 1000000 , 1 ) LIMIT 30

复制

同样多执行几次,避免Cache等影响,取平均值,其执行时间大约为:0.6049 秒

=================

其实效率的差别就在于以下两种方式的差别:

SELECT* FROM`cdb_posts` ORDER BY pid LIMIT 1000000 , 1(6.7732 秒)SELECTpid FROM`cdb_posts` ORDER BY pid LIMIT 1000000 , 1(0.5838 秒)

复制

有网友说如果是Mysql静态表的话,两个查询的速度应该基本一样,到底是不是我再做实验验证一下,同样是上面所用的表,只是删除了所有的varchar, text之类的变长度字段,以保证其是静态表,然后执行:

SELECT* FROM`cdb_posts` ORDER BY pid LIMIT 1000000 , 1(2.1303 秒)SELECTpid FROM`cdb_posts` ORDER BY pid LIMIT 1000000 , 1(0.5532 秒)

复制

可以发现,转换成静态表之后,SELECT *后的速度确实快了一些,但查询速度仍然处于秒的级别,可以说还是很慢的。

来源地址:https://blog.csdn.net/2301_78145658/article/details/131237176

您可能感兴趣的文档:

--结束END--

本文标题: oracle、mysql 分页查询比较

本文链接: https://www.lsjlt.com/news/413372.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle、mysql 分页查询比较
    1、 Oracle的分页查询语句 分页查询格式: SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE RO...
    99+
    2023-09-20
    oracle 数据库
  • Oracle 分页查询
    --第一种写法select * from (select rownum rw,t.* from emp t) a where a.rw >=2 and a.rw<=...
    99+
    2024-04-02
  • MySQL-分页查询
    分页查询 1 简要介绍1.1 应用场景1.2 语法1.3 特点 2 简单使用 1 简要介绍 1.1 应用场景 应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求 1.2 语法 select 查询列...
    99+
    2023-08-25
    java mysql
  • mysql的join查询和多次查询方式比较
    目录join查询和多次查询比较查询语句join、on、where执行顺序一、典型SELECT语句完整的执行顺序二、from三、on四、on 条件与where 条件五、join 流程总结join...
    99+
    2023-03-09
    mysql查询 mysqljoin查询 mysql多次查询
  • MySQL:查询时进行时间比较
    MySQL:查询时进行时间比较 前言一、查询距离当前时间多久以前二、查询特定时间范围 前言 在 MySQL 中查数据的时候,往往需要对记录的创建时间进行筛选,比如只需要查询今年1-5月份的,或者查询距离当前时间多久以前的。 本...
    99+
    2023-08-19
    mysql 数据库 时间筛选
  • 报表连hive时数据量比较大如何分页查询
    小编给大家分享一下报表连hive时数据量比较大如何分页查询,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Hive 提供了类似 Oracle 的 rownum 机制,类似这样(效率比较差):select * fro...
    99+
    2023-06-02
  • Oracle分页查询回顾
    ...
    99+
    2024-04-02
  • mysql分页查询的示例
    这篇文章将为大家详细讲解有关mysql分页查询的示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。LIMIT子句可以被用于强制 SELECT 语句返回指定的记录数...
    99+
    2024-04-02
  • Oracle分页查询的示例分析
    这篇文章主要介绍Oracle分页查询的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Oracle分页查询的实例详解1.Oracle分页查询:SELECT *...
    99+
    2024-04-02
  • MySQL的分页查询方式
    这篇文章主要介绍“MySQL的分页查询方式”,在日常操作中,相信很多人在MySQL的分页查询方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL的分页查询方式”的疑惑...
    99+
    2024-04-02
  • oracle怎么实现分页查询
    在Oracle中,可以通过使用ROWNUM和子查询来实现分页查询。以下是一个示例:```sqlSELECT * FROM (SELECT column1, column2, ..., ROWNUM AS rnFROM y...
    99+
    2023-08-11
    oracle
  • Oracle如何实现分页查询
    这篇文章给大家分享的是有关Oracle如何实现分页查询的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是分页查询分页查询就是把query到的结果集按页显示。比如一个结果集有1W...
    99+
    2024-04-02
  • mysql中timestamp比较查询遇到的坑有哪些
    这篇文章主要介绍mysql中timestamp比较查询遇到的坑有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!timestamp比较查询遇到的坑要求mysql建表的时候update_time 为timestamp...
    99+
    2023-06-21
  • MySQL查询时间段用INT还是DateTime比较好
    本篇内容主要讲解“MySQL查询时间段用INT还是DateTime比较好”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL查询时间段用INT还是DateT...
    99+
    2024-04-02
  • jsp+mysql实现网页的分页查询
    本文实例为大家分享了jsp+mysql实现网页的分页查询的具体代码,供大家参考,具体内容如下 一、实现分页查询的核心sql语句 (1)查询数据库的记录总数的sql语句: selec&...
    99+
    2024-04-02
  • mysql如何实现分页查询
    小编给大家分享一下mysql如何实现分页查询,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! mysq...
    99+
    2024-04-02
  • mysql分页查询如何优化
    这篇文章主要介绍了mysql分页查询如何优化的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql分页查询如何优化文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
  • 从分区功能比较mysql与postgresql and oracle
         现在去IOE声势浩大,感觉现在不懂点mysql,pgsql,光谈oracle的话,都有点不好意思跟人打招呼,作为热爱oracle的人,现在对mysql、PG...
    99+
    2024-04-02
  • mysql和mssql以及oracle的分页查询方法介绍
    本篇内容介绍了“mysql和mssql以及oracle的分页查询方法介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能...
    99+
    2024-04-02
  • es 分页查询
    from和size是查询所有数据,然后剔除不要的部分 POST /my_index/my_type/_search{ "query": { "match_all": {}}, "from": 100, "size": 1...
    99+
    2023-09-03
    elasticsearch 数据库 mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作