`

sql分段显示数据

    博客分类:
  • Sql
阅读更多

Mysql limit(2,3)

SqlServer 

SELECT TOP 页大小 *
FROM
 Users
WHERE
 (ID NOT IN (SELECT TOP (页大小*(页数-1)) ID FROM Users ORDER BY ID DESC))
ORDER BY
 ID DESC
Oracle

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 /*+ FIRST_ROWS */ * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21

 

分享到:
评论

相关推荐

    经典SQL脚本大全

    │ │ 8.2.2 树形数据层次显示处理示例.sql │ │ 8.2.2 树形数据广度排序处理示例.sql │ │ 8.2.2 树形数据深度排序处理示例(模拟单编号法).sql │ │ 8.2.2 树形数据深度排序处理示例(递归法).sql │ │ 8.2.3 ...

    Sqlserver2000经典脚本

    │ 8.1.4 生成编码规则调整处理T-SQL语句的函数.sql │ │ 8.1.5 删除节点处理的通用存储过程.sql │ │ 8.1.5 移动节点处理的通用存储过程.sql │ │ 8.2.2 树形数据层次显示处理示例.sql │ │ ...

    SQL SERVER 2000开发与管理应用实例

    涉及安装和配置SQL Server、日期处理、字符处理、排序规则、编号处理、数据统计与汇总、分页处理、树形数据处理、数据导入与导出、作业、数据备份与还原、用户定义数据类型、数据库安全、系统表应用实例、SQL Server...

    ASP+SQL教材大全

    在一个HTML表单字段中自动显示数据,是相当困难的。例如,正确的在检查框中设置选中标志可能是棘手的,你可以学到如何设置检查框。 ■搜寻一个数据库表。参观ASP Job站点的参观者可以通过不同的查询准则来查询履历...

    sqlserver2000基础(高手也有用)

    9.4.2 实现客户端其他OLE DB数据源与SQL Server之间的数据交换 289 9.4.3 在客户端实现SQL Server数据导入与导出处理的一些说明 289 9.5 在数据库中存取文件 290 9.5.1 SQL Server中的文件存取方法 290 ...

    C#开发经验技巧宝典

    0822 分段显示电话号码颜色 493 0823 软件版本号是如何组成的 493 0824 单击“关闭”按钮或按 Alt + F4 键时最小化窗口 494 0825 屏蔽RichTextBox控件 Ctrl + V 快捷键 495 18.4 其他 495 0826 将...

    『花韶纷飞』 加强版.rar

    7、增加了“首页分段显示”功能。 8、增加了前后台搜索功能。 9、增强了后台管理功能。 10、增加"今**发贴"统计功能。 11、增加超强EM贴图及动作帖功能。 12、论坛配色、帖子、表格美化。 13、修复了所有已知漏洞...

    Oracle8i_9i数据库基础

    第六章 使用SQL 进行数据操作 170 §6.1 INSERT操作 170 §6.1.1 用文字插入操作 171 §6.1.2 用子查询插入操作 171 §6.2 UPDATE操作 172 §6.2.1 用文字更新操作 173 §6.2.2 用查询更新操作 173 §6.2.3 用相关子...

    数据库基础

    第六章 使用SQL 进行数据操作 170 §6.1 INSERT操作 170 §6.1.1 用文字插入操作 171 §6.1.2 用子查询插入操作 171 §6.2 UPDATE操作 172 §6.2.1 用文字更新操作 173 §6.2.2 用查询更新操作 173 §6.2.3 用相关子...

    oblog 3.13_0519_SQL商业版

    oblog 3.13_0519_SQL商业版 博客完全个人化设定,通过首页调用文件,您可以非常容易的打造自己的免费blog服务...9、增加了用户blog首页日志统计数据显示等。 10、修正了其他已知bug等. 安装方法见使用说明

    mara-data-explorer:基于Flask的UI,用于显示和分段单个数据库表

    无论数据仓库的报告前端多么强大,许多用户都希望直接访问原始数据,而不必直接在数据库上使用SQL。 这可以是 BI产品经理调试数据问题, 需要原始数据进行Excel数据浏览的分析师, 机器学习工程师需要用于训练模型...

    orcale常用命令

    显示SQL缓冲区命令 SQL&gt;L 修改SQL命令 首先要将待改正行变为当前行 SQL&gt;n 用CHANGE命令修改内容 SQL&gt;c/旧/新 重新确认是否已正确 SQL&gt;L 使用INPUT命令可以在SQL缓冲区中增加一行或多行 SQL&gt;i SQL&gt;输入内容 e、...

    基于Python协同过滤算法的电影推荐视频网站设计+sql数据库(毕设源码).zip

    用户需要给自己看过的电影进行评分,评分起止 为0.5-5.0分,共10个分段.每评价一部电影就要点击一下提交按钮,将所评分的电影的 imdbId号以及对应的评分存入数据库中.用户点击“推荐结果”按钮,系统就调用推荐算法 ...

    Python基于协同过滤算法实现的的电影推荐视频网站+源代码+文档说明+sql文件

    用户需要给自己看过的电影进行评分,评分起止 为0.5-5.0分,共10个分段.每评价一部电影就要点击一下提交按钮,将所评分的电影的 imdbId号以及对应的评分存入数据库中.用户点击“推荐结果”按钮,系统就调用推荐算法 ...

    物业管理系统源码Delphi+SQL

    特别是左边的树状功能列表和统一的宣传品界面,清晰地显示出各种业务的操作流程。用户不用在各个窗口不段的切换。 2.3 功能模块 软件操作的主要功能模块分为四个部分,列在主界面的最左边,非常醒目并且条理化强。...

    华琦库管精灵网络版V1.36A

    该软件具有独到的数据分段检索、自定义特殊处理、智能辅助输入、智能成本核算、分级+分组权限控制、外部数据导入、多种数据格式转换等神奇功能,并采用了数据批量传送、多重数据加密、强力数据压缩、并发冲突降解等...

    华琦库管精灵单机版V1.36A

    该软件具有独到的数据分段检索、自定义特殊处理、智能辅助输入、智能成本核算、分级+分组权限控制、外部数据导入、多种数据格式转换等神奇功能,并采用了数据批量传送、多重数据加密、强力数据压缩、并发冲突降解等...

Global site tag (gtag.js) - Google Analytics