gpt4 book ai didi

oracle - hibernate oracle rownum问题

转载 作者:行者123 更新时间:2023-12-04 19:43:07 25 4
gpt4 key购买 nike

SELECT * FROM ( 
select *
from tableA
where ColumnA = 'randomText'
ORDER BY columnL ASC
) WHERE ROWNUM <= 25

在执行此查询时,由于某些 Oracle 优化,该查询大约需要 14 分钟才能执行。如果我删除 where 子句,查询将在几秒钟内执行。表的大多数列都有索引,包括上面提到的那些。当我使用 hibernate 时,我对查询的结构没有太大的灵活性。

此查询也立即返回结果,并具有正确的结果:
SELECT * 
FROM (
select *
from tableA,
dual
where ColumnA = 'randomText'
ORDER BY columnL ASC
) WHERE ROWNUM <= 25

使用 hibernate 有什么我可以做的吗?

更新:我使用 EntityManager.createQuery(),我也使用 setMaxResults(25) 和 setFirstResult()。根据观察日志,上面的查询是 hibernate 查询的样子

最佳答案

我没有得到与您的查询完全匹配的解释计划,但似乎 oracle 对两个查询使用了不同的索引。

你能创建一个包含 columnA 的索引吗?和 columnL ?

如果您的索引仅包含 columnA ,您可能可以删除它,而不会对其他查询的性能产生很大影响。

另一种方法是添加提示以使用更快的查询中使用的索引。但这需要您使用 native sql。

关于oracle - hibernate oracle rownum问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12461265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com