1

也许任何人都可以使用hibernate和oracle来帮助我解决一个非常奇怪的行为。这是我第一次使用hibernate和oracle,所以这对你来说可能是一个简单的步骤:)。

但是让我们详细介绍一下。一个简单的 count(*) 结果:

 select * from ( select count(*) as col_0_0_ from TABLE tbl ) where rownum <= ?

这没什么大不了的,但是如果我有一个要返回的行数有限的选择,它看起来像这样:

select * from ( select SOME_FIELDS from TABLE tbl order by tbl.ID desc ) where rownum <= 20

这不是很快。如果我自己做

select * from from TABLE tbl where rownum <= 20 order by tbl.ID desc 

它和预期的一样快。有什么可以反对的吗?也许我的实体需要更多标签?

谢谢你!

4

1 回答 1

1

第一个查询没有多大意义,因为 aselect count(*)只返回 1 行。

第二个可能是你真正想要的。

第三个看起来像第二个,但根本不做同样的事情。order by 子句应用在 where 子句之后。所以第三个查询从表中选择前 20 行,没有任何特定的顺序,并按 ID 对这 20 行进行排序。第二个查询从表中选择行,按 ID 对它们进行排序,并仅返回这些排序行中的前 20 行。

于 2012-05-09T10:12:24.723 回答