当前位置:  数据库>oracle

高效分页的SQL技巧(以Oracle为例)

    来源: 互联网  发布时间:2017-05-15

    本文导语: 一般的分页写法大概就是下面的样子(所谓的“三层嵌套”写法), SELECT * FROM (SELECT a.* ,rownum rn FROM (SELECT * FROM table_name) a WHERE rownum = 21 在遇到显示数据表中1百万行以后的记录时,可能会出现性能问题。有人提出的解决方案是...

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

SELECT *
FROM (SELECT a.*
,rownum rn
FROM (SELECT * FROM table_name) a
WHERE rownum = 21

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

SELECT *
FROM t
WHERE ROWID IN (SELECT rwd
FROM (SELECT t.rowid rwd
,rownum n
FROM t
WHERE rownum = 1000000)

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


    
 
 

您可能感兴趣的文章:

  • SQL语句技巧:按月统计数据
  • sql2005统计技巧示例
  • ORACLE SQL-UPDATE、DELETE、INSERT优化和使用技巧分享
  • oracle—SQL技巧之(一)连续记录查询sql案例测试
  • SQL小技巧 又快又简单的得到你的数据库每个表的记录数
  • sql2005 存储过程技巧点滴记录
  • SQL Server数据库实用技巧
  • sql 查询结果合并union all用法_数据库技巧
  • 教你轻松学会SQL Server记录轮班的技巧
  • 编程经验点滴 动态SQL的拼接技巧
  • oracle—SQL技巧之(二)WMSYS.WM_CONCAT函数实现多行记录用逗号拼接在一起
  • SQL Server 服务器优化技巧浅谈
  • SQL集合函数中case when then 使用技巧
  • 优化 SQL Server 索引的小技巧
  • sql高级技巧几个有用的Sql语句
  • sql分组排序与分组统计技巧
  • 经典SQL语句大全-技巧篇
  • sql排序、分组、统计十种方法技巧
  • sql server日期函数及使用技巧
  • sql优化技巧大全 sql优化注意事项
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle 数据库开发工具 Oracle SQL Developer
  • oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
  • 取数据库前几条数据(sql server、oracle、mysql)的sql写法
  • Oracle发布Oracle SQL Developer 1.2数据库开发工具 帮助用户简化开发工作
  • oracle用什么SQL语句判断表存不存在
  • 与jsp搭配,oracle好?sql server好?
  • Oracle开发工具 Oracle SQL Handler
  • Oracle与SQL Server区别在哪里
  • oracle sql执行过程(流程图)
  • Oracle的SQL语句中如何处理‘&’符号
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.sql接口statement的类成员方法: executeupdate定义及介绍
  • 请问,这是什么错误!java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][Named Pipes]??????? SQL Server?虽然分少,但一定给,只要您是前5名回复者中最好的以为!
  • java命名空间java.sql接口connection的类成员方法: nativesql定义及介绍
  • SQL查询分析工具 SQL Workbench/J
  • java命名空间java.sql接口preparedstatement的类成员方法: executeupdate定义及介绍
  • SQL Server统计SQL语句执行时间的脚本
  • java命名空间java.sql接口rowid的类成员方法: getbytes定义及介绍
  • SQL客户端软件 PKLite SQL Client
  • java命名空间java.sql接口ref的类成员方法: getbasetypename定义及介绍
  • SQL语句实现SQL Server 2000及Sql Server 2005日志收缩(批量)
  • java命名空间java.sql接口databasemetadata的类成员方法: getsqlkeywords定义及介绍
  • SQL客户端管理工具 SQuirreL SQL Client
  • java命名空间java.sql接口rowid的类成员方法: tostring定义及介绍
  • 如何处理此错误:java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]没有执行可选特性
  • java命名空间javax.sql.rowset接口joinrowset的类成员方法: getwhereclause定义及介绍
  • sql2005 大数据量检索分页的sql代码
  • java命名空间java.sql接口statement的类成员方法: execute定义及介绍
  • 如何实现连接一次数据库,提交多个sql语句。(sql的批处理)
  • java命名空间java.sql接口resultset的类成员方法: getcursorname定义及介绍
  • 微软网站下载的Ms SQL Server2000 JDBC Driver,必须用英文版的SQL server2000吗?
  • java命名空间java.sql接口resultsetmetadata的类成员方法: getcolumntype定义及介绍
  • 安装SQL2008时提示删除SQL2005Express工具的解决方法


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,