对我来说,这是一个永无止境的话题,我想知道我是否会忽略某些事情。本质上,我在应用程序中使用两种类型的SQL语句:
现在,我们讨论的是针对具有几百万条记录的表的一些查询,再加上另外五个具有几百万条记录的表的查询。显然,我们几乎不希望全部获取它们,这就是为什么我们有上述两种方法来限制用户查询的原因。
情况1 确实很简单。我们只是添加了一个额外的ROWNUM
过滤器:
WHERE ...
AND ROWNUM < ?
这相当快,因为Oracle的CBO会在执行计划时考虑使用此过滤器,并且可能会应用一项FIRST_ROWS
操作(类似于/*+FIRST_ROWS*/
提示所执行的操作)。
*但是, *情况2 对于Oracle来说比较棘手,因为没有LIMIT ... OFFSET
其他RDBMS中的子句。因此,我们将“业务”查询嵌套在技术包装中,如下所示:
SELECT outer.* FROM (
SELECT * FROM (
SELECT inner.*, ROWNUM as RNUM, MAX(ROWNUM) OVER(PARTITION BY 1) as TOTAL_ROWS
FROM (
[... USER SORTED business query ...]
) inner
)
WHERE ROWNUM < ?
) outer
WHERE outer.RNUM > ?
请注意,TOTAL_ROWS
计算该字段是为了知道即使不获取所有数据,我们将拥有多少页。现在,此分页查询通常非常令人满意。但是有时(如我所说,当查询5M
+记录时(可能包括未索引的搜索)),此过程将持续2-3分钟。
编辑 :请注意,潜在的瓶颈不是那么容易解决,因为在分页之前必须应用排序!
我想知道,是国家的最先进的是模拟的LIMIT ... OFFSET
,包括TOTAL_ROWS
在甲骨文,还是有更好的解决方案,这将是由设计速度更快,例如,通过使用ROW_NUMBER()
窗函数,而不是ROWNUM
伪列?
与第2种情况的主要问题是,在许多情况下,整个查询结果集,以获取,然后进行排序 之前, 可以返回的第一个N行-除非ORDER
BY列索引和Oracle可以使用索引来避免排序。对于复杂的查询和大量数据,这可能需要一些时间。但是,您可以采取一些措施来提高速度:
编辑:
另一个想法:您当前正在向用户显示 可以
返回数千或数百万行的报告,但是用户从不现实地翻阅所有行。您是否可以不强迫他们选择较小量的数据,例如将选择的日期范围限制为3个月(或其他日期)?
问题内容: 我在Oracle11g中有一个具有(id,parent_id)结构的表。 我想对其进行查询,以获取与这些ID各自分层链接的所有行,因此结果应为: 我一直在和上苦苦挣扎,现在,我所能得到的只是查询所需结果的一小部分: 我不想使用任何循环来获取完整的结果。 任何的想法 ? 最好的问候,J茅r么我Lefr猫re PS:在第一个答案之后编辑,注意到我忘记了一些我想要的结果… 问题答案: 您发布
本文向大家介绍详解SQLServer和Oracle的分页查询,包括了详解SQLServer和Oracle的分页查询的使用技巧和注意事项,需要的朋友参考一下 不管是DRP中的分页查询代码的实现还是面试题中看到的关于分页查询的考察,都给我一个提示:分页查询是重要的。当数据量大的时候是必须考虑的。之前一直没有花时间停下来好好总结这里。现在又将Oracle视频中关于分页查询的内容看了一遍,发现很容易就懂了
使用数据库的应用程序,多数情况下都需要使用 “分页” 这个功能。尤其是在 Web 应用程序中,后端的分页查询尤其的普遍。 在以往的使用经验中,一个分页查询,除了能获取到一个列表外,我们通常需要如下几个信息才能在客户端显示出一个完整的翻页条。 当前页数 -- 第几页 页大小 -- 每页有多少条记录 总页数 -- 一共多少页 总记录数 -- 如果不分页,一共有多少条记录 当我们获得了这四条信息后,对于
limt 分页查询 查询前3条记录 分页公式: (offset - 1) * limit SELECT name FROM `student` LIMIT 0, 3; Student.findAll( { attributes:['name'], // 当前页 offset:0, // 每页显示的条数 limit:3 }) 分页案例 router.ge
在使用 hyperf/database 来查询数据时,可以很方便的通过与 hyperf/paginator 组件配合便捷地对查询结果进行分页。 使用方法 在您通过 查询构造器 或 模型 查询数据时,可以通过 paginate 方法来处理分页,该方法会自动根据用户正在查看的页面来设置限制和偏移量,默认情况下,通过当前 HTTP 请求所带的 page 参数的值来检测当前的页数: 由于 Hyperf 当
我有Oracle表: 数据 Oracle是否支持产生以下输出的查询?--删除重复并将其分组到单个JSON数组中 版本: Oracle数据库12c企业版发布12.2.0.1.0-64位生产