2

重複の可能性:
SQL でランダムな行を要求する方法は?

こんにちは、Oracle データベースからランダムなレコードを選択しようとしています。以下のクエリを使用してみました。

select field1 
from (select field1 from table1 where field2='SAMPLE_VALUE' order by dbms_random.value) 
where rownum <2;

これは問題なく機能しますが、非常に遅くて高価です。

これを達成するためのより迅速な方法はありますか?

4

3 に答える 3

2

SAMPLE 句を試すことができます。

select field1
from   table1 sample (1)
where  field2='SAMPLE_VALUE' and
       rownum <=1

でも:

  1. おそらく、インデックスベースのアクセスは得られないでしょう
  2. 十分な値が得られるという保証はありません
  3. おそらく、テーブルの「先頭」から値を取得する傾向があります。
于 2012-05-15T08:57:46.467 に答える
0

実行計画を確認する必要があります。
おそらくfull accessテーブルに対して を実行しているので、これにインデックスを追加できれば、オプティマイザがに従って をfield2実行する価値があるかもしれません。 (field2についてはよくわからないので、よく調べてください)index range scanwhere clause

于 2012-05-15T09:01:43.607 に答える
0

レコードに一意の数値列がある場合、ランダムに生成された値と比較しようとします。のようなものSELECT ... FROM ... WHERE id = RANDOM_VALUE。ただし、この一意の列とランダム値の範囲を同じにするために、いくつかの計算が必要になる場合があります。

于 2012-05-15T08:51:44.740 に答える