Kra*_*ken 2 performance oracle query
这是我的查询
SELECT *
FROM
(
SELECT a.*, rownum rnum
FROM
(
SELECT id, data
FROM t
ORDER BY id
) a
WHERE rownum <= HIGHER
)
WHERE rnum >= LOWER;
Run Code Online (Sandbox Code Playgroud)
我有大量数据,因此我一次获取其中的一部分,比如第一次尝试从 1 到 100,第二次尝试从 101 到 200,依此类推。
如果我执行上面的查询,它将对每个数据部分执行以下操作:
SELECT id, data
FROM t
ORDER BY id
Run Code Online (Sandbox Code Playgroud)
我认为对每个部分都这样做效率很低。我不能做一些像订购我的数据集并应用 rownum 之类的事情吗?它会有任何用处吗?
您是否打算最终获得每一行?例如,您是否获取所有行并将它们传递给某种需要处理每一行的进程?或者您打算将结果页面呈现给可能只查看第一页或第二页结果的人。
假设您将结果呈现给只会查看前几页数据的人员,那么您的查询可能相当有效。假设id
列上有一个索引,为了获取第 101-200 行,Oracle 只需id
从索引中读取前 200 个值,然后过滤掉第 1-100 行。这不如获得第一页结果那么有效,但它仍然非常有效。
当然,随着您越来越深入地了解数据,分页查询的效率会越来越低。如果您的意图是最终获取每一行,那将是一个问题。但是,如果您将结果呈现给人类,这通常不是问题。人类并不真正关心获取结果集的第 50 页需要多长时间——他们会在此之前很久就放弃。
如果您打算将数据发送到 Java 进程来处理数据(这将比处理数据库中的数据效率低得多——Oracle 和 PL/SQL 是专门为处理大量数据而设计的),它会通常情况下,发出一个没有ORDER BY
.
归档时间: |
|
查看次数: |
6273 次 |
最近记录: |