【发布时间】:2021-11-01 01:18:35
【问题描述】:
在尝试从 oracle11g 数据库中获取具有分页的对象列表时,我遇到了一个很大的性能问题。
据我所知并在网上查到,在 oracle11g 中实现分页的唯一方法如下: 示例:[page=1, size=100]
SELECT * FROM
(
SELECT pagination.*, rownum r__ FROM
(
select * from "TABLE_NAME" t
inner join X on X.id = t.id
inner join .....
where ......
order
) pagination
WHERE rownum <= 200
)
WHERE r__ > 100
这个查询的问题是,从表“TABLE_NAME”中获取数据的最内部查询返回了大量数据,导致整个查询需要 8 秒(应用后返回大约 200 万条记录) where 子句,它包含 9 或 10 个 join 子句)。
这样做的原因是,最内部的查询是获取所有尊重 where 子句的数据,然后第二个查询获取 200 行,第三个查询排除前 100 行以获取第二页的数据需要。
难道没有办法在一个查询中做到这一点,即无需执行所有这些步骤并导致性能问题就可以获取我们需要的第二页数据吗?
谢谢!!
【问题讨论】:
标签: oracle performance oracle11g pagination query-optimization