一般的分页写法大概就是下面的样子(所谓的“三层嵌套”写法)

  1. SELECT *
  2. FROM   (SELECT a.*
  3. ,rownum rn
  4. FROM   (SELECT * FROM table_name) a
  5. WHERE  rownum <= 40)
  6. WHERE  rn >= 21

在遇到显示数据表中1百万行以后的记录时,可能会出现性能问题。有人提出的解决方案是利用索引,首先通过扫描索引查出rowid,然后再通过rowid查出所需记录。这样做的问题是如果没有索引怎么办?以Oracle为例,下面是一个更具有一般意义的高效写法:

  1. SELECT *
  2. FROM   <your table name> t
  3. WHERE  ROWID IN (SELECT rwd
  4. FROM   (SELECT t.rowid rwd
  5. ,rownum  n
  6. FROM   <your table name> t
  7. WHERE  rownum <= 1000000 + 10)
  8. WHERE  n >= 1000000)

优化的思想是跳到第1百万位置时只是扫描了rowid,避免了扫描全部字段。当字段个数较多时,速度会有十倍的提升。本例在普通的设备上运行不到1秒就出来结果了。这一方法在千万级或亿级仍然存在问题,其原因在于循环次数并未减少。如果真有rwd这样一个字段,那么通过索引和分区等手段,也能够确保速度。不过,话又说回来,分页显示成百上千万条记录这样的事情,其欲达到的业务目的本身可否有更好的解决之道呢?

高效分页的SQL技巧(以Oracle为例)相关推荐

  1. oracle分页查询sql语句通用,oracle分页查询sql语句,oracle分页查询sql语句详解

    oracle分页查询sql语句,oracle分页查询sql语句详解,Oracle分页查询sql语句 Oracle中分页和MySql中的分页不同,MySql中的分页使用关键字limit即可,相对简单一点 ...

  2. oracle如何高效分页,oracle学习之高效分页存储过程实例

    oracle学习之高效分页存储过程实例 时间:2017-07-11 来源: create or replace package p_page is -- Author : PHARAOHS -- Cr ...

  3. oracle万能分页代码,oracle高效分页存储过程代码

    oracle高效分页存储过程代码 create or replace package p_page is -- author : pharaohs -- created : 2006-4-30 14: ...

  4. sql server与oracle的分页,详解SQLServer和Oracle的分页查询

    不管是DRP中的分页查询代码的实现还是面试题中看到的关于分页查询的考察,都给我一个提示:分页查询是重要的.当数据量大的时候是必须考虑的.之前一直没有花时间停下来好好总结这里.现在又将Oracle视频中 ...

  5. oracle的分页查询怎么写,ORACLE分页查询SQL语法

    ORACLE分页查询SQL语法 --1:无ORDER BY排序的写法.(效率最高) ­ --(经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!) ­ S ...

  6. Oracle分页查询sql语句

    1.oracle中的分页查询sql语句基本可以按照如下的模板来改写: SELECT *FROM (SELECT A.*, ROWNUM RNFROM (SELECT * FROM TABLE_NAME ...

  7. oracle mysql limit用法_mysql以及oracle数据分页的sql示例(limit和Rownum的用法) | Soo Smart!...

    对数据查询结果集截断获取,来实现数据库层的分页.在mysql以及Oracle下的实现如下: MySQL下使用limit和offset,Oracle使用Rownum. MySQL下limit和offse ...

  8. SQL Server 与 ORACLE 的区别

    sql server 与  oracle的区别:    DBMS 数据库管理系统 1.数据类型不同.   sql server 的数据类型:int ,smallint ,char,varchar,nc ...

  9. php+mysql 大容量数据高效分页效果(弃用limit)

    发现当表中有很多上万条数据时,越后的数据用limit分页显示就越慢(>2秒),可能是mysql的特性所致.所以花了点时间总结实现了更优解决方案,最终实现毫秒级响应.若网友有更优的,请留言,谢谢! ...

最新文章

  1. oracel 服务详细介绍
  2. golang 使用 http socks5 代理
  3. python模块引用
  4. 2021春季每日一题 【week2 未完结】
  5. 姗姗来迟的Ubuntu版MX4,已经没了当年的初衷
  6. linux讲解系列:激活script
  7. catia曲面扫掠命令详解_Mastercam快捷键命令,附中英文功能讲解!值得收藏!
  8. ASP.NET Core分布式项目实战(详解oauth2授权码流程)--学习笔记
  9. 背板,线速,交换容量详细解说
  10. 发送和接收_通用异步接收器/发送器(UART)
  11. cgic 测试demo
  12. WPS检测到字体缺失Windows字体包方正字体库
  13. 硬件与分析-音速小子
  14. Ubuntu 18.04 LTS版本 GoldenDict安装与配置
  15. 775针服务器cpu性能排行,775针cpu排行榜说明
  16. 《3D数学基础》1.7 向量的向量积
  17. 【python教程入门学习】拒绝反爬虫!教你搞定爬虫验证码
  18. 【欣赏】一组唯美的图片
  19. 论文阅读 Safe Local Exploration for Replanning in Cluttered Unknown Environments
  20. 删除域中的Exchange服务器

热门文章

  1. python中的map、filter、reduce函数
  2. uestc 851 方老师与素数
  3. 每次Title显示不同的名言
  4. 6个特征,判断你的领导值不值得追随
  5. STM32之通用定时器编码器模式
  6. linux band0 手动重启,band,call,apply的区别以及手动封装
  7. mysql申请 表空间_MySQL 系统表空间扩容方法
  8. 程序员恭喜了!10月起逼自己拿下这个证,年薪68万起!
  9. 为什么程序员的女朋友或老婆颜值普遍都偏高?
  10. 如何不用鼠标操作电脑