问题描述
嗨,汤姆,
我们在java应用程序中使用以下查询,以便在分页中获取查询结果。为了加快任务速度,我们同时执行15个查询。查询在不同的计算机上执行,但针对数据库中的同一表。请注意: 在我们的情况下,我们只是分页那些具有主键的表,我们不使用任何表之间的连接。
当这些查询针对具有20亿多个记录的大表执行时,我们会收到以下错误:
当我们尝试在SQL DEVELOPER上执行查询时,似乎花了很长时间,即使是对于起始页,因此我们通过以下查询更改了上述查询:
此查询执行速度比上一个更快。
您能否建议此查询对ORA-01652有效?在这种情况下,还有比上面更好的查询吗?我们是否可以在不使用order by子句的情况下对查询结果进行分页 (认为由于order by子句可能会再次导致此问题)?
我们在java应用程序中使用以下查询,以便在分页中获取查询结果。为了加快任务速度,我们同时执行15个查询。查询在不同的计算机上执行,但针对数据库中的同一表。请注意: 在我们的情况下,我们只是分页那些具有主键的表,我们不使用任何表之间的连接。
SELECT
subquery.id, subquery.column1 ...
FROM
(
SELECT
large_rows.id, large_rows.column1, ... ROW_NUMBER()
OVER
(ORDER BY id ASC)
AS
row_number
FROM
)
subquery
WHERE
row_number
BETWEEN
AND
; 当这些查询针对具有20亿多个记录的大表执行时,我们会收到以下错误:
ORA-01652: unable to extend temp segment in tablespace
当我们尝试在SQL DEVELOPER上执行查询时,似乎花了很长时间,即使是对于起始页,因此我们通过以下查询更改了上述查询:
SELECT /*+ ordered use_nl(p s) */
s.id, s.column1...
FROM
(
SELECT
ROWNUM RN,
RD
FROM
(
SELECT
ROWID RD
FROM
ORDER BY
.id
) T
WHERE
ROWNUM < 2000
) P,
large_rows S
WHERE
RN > 1
AND P.RD = S.ROWID; 此查询执行速度比上一个更快。
您能否建议此查询对ORA-01652有效?在这种情况下,还有比上面更好的查询吗?我们是否可以在不使用order by子句的情况下对查询结果进行分页 (认为由于order by子句可能会再次导致此问题)?
专家解答
我们需要知道正在使用什么执行计划。
这个视频将告诉你要找什么
这个视频将告诉你要找什么
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




