1

休止状態とオラクルを使用して、非常に奇妙な動作を手伝ってくれる人がいるかもしれません。休止状態とオラクルを使用するのは初めてなので、簡単なステップになるかもしれません:)。

しかし、詳細に入りましょう。単純な 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

select count(*)aは 1 行しか返さないため、最初のクエリはあまり意味がありません。

2番目はおそらくあなたが本当に欲しいものです。

3 番目のものは 2 番目のものと似ていますが、まったく同じことをしていません。order by 句は where 句の後に適用されます。したがって、3 番目のクエリは、テーブルから最初の 20 行を特定の順序なしで選択し、これらの 20 行を ID で並べ替えます。2 番目のクエリは、テーブルから行を選択し、ID で並べ替えて、並べ替えられた行から最初の 20 行のみを返します。

于 2012-05-09T10:12:24.723 に答える