SELECT * FROM (
select *
from tableA
where ColumnA = 'randomText'
ORDER BY columnL ASC
) WHERE ROWNUM <= 25
在執行此查詢時,由於某些Oracle優化,查詢大約需要14分鐘才能執行。如果我刪除where子句,查詢將在幾秒鐘內執行。表中的大多數列都有索引,包括上面提到的索引。我在使用hibernate時對查詢的結構沒有太大的靈活性。hibernate oracle rownum問題
此查詢返回的結果瞬間也與正確的結果:
SELECT *
FROM (
select *
from tableA,
dual
where ColumnA = 'randomText'
ORDER BY columnL ASC
) WHERE ROWNUM <= 25
是有什麼我能做的,使用Hibernate?
更新:我使用EntityManager.createQuery(),我也使用setMaxResults(25)和setFirstResult()。上面的查詢是什麼hibernate的查詢看起來像,在觀察日誌
請問您可以發佈HQL本身嗎?您的原始查詢是否包含集合的連接?此外,映射本身也很有用。 –
你能否提供兩個查詢的解釋計劃? –
@ctapobep http://pastebin.com/qjzu5HKc是HQL。正如你所看到的,沒有聯接。 – vritantjain