2016-05-19 7 views
0

こんにちは私はランダムな行を取得する方法を知っていますが、私は最適化された方法が必要です。各テーブルにランダムな行をより最適化された方法でデータベースから取得する方法

select * from ADM_USER where ADM_USER_ID=(select Round(dbms_random.value(1,max(ADM_USER_ID))) from ADM_USER) 

を:私は私が使っていた.Iは、その前に

SELECT * FROM (SELECT * FROM ADM_USER ORDER BY dbms_random.value) WHERE rownum = 1; 

を使用しています(任意のランダムな行のために、私はすべての列の値は、データベース間で一致するかどうかをチェックしています)、ランダムなレコードの検証をしています後者の問題は、ADM_USER_IDの値が連続していないことです。ほとんどの場合、クエリは空の結果セットを返します。最初のものは良いですが、大きな基数を持つテーブルの場合は6〜7秒です。

ありがとうございます。

+0

「SELECT * FROM ADM_USER」ADM_USER_ID =(SELECT TOP 1 ADM_USER_ID FROM ADM_USER ORDER BY dbms_random.value);「 – artm

+2

このMySQLまたはOracleですか? – mathguy

+0

SELECT TOP(1)... ORDER BY NEWID() – Biscuits

答えて

1

Oracleの場合は、SAMPLE句を参照してください。以下は、あなたはまだその上にrownum=1フィルタを追加することができ、テーブルのランダムな1%

select * from MDSYS.SDO_COORD_REF_SYS sample(1); 

を見ていきます。

+0

ありがとうございました。私の推測するそのbetternow – FaheemFayaz

関連する問題