0

Androidでは、sqliteデータベースに90,000を超えるレコードがあり、4つの異なるランダム行をフェッチしたいのですが、非常に時間がかかっています。私の携帯電話で6秒

クエリは以下です

   select * from Employee RANDOM LIMIT 4
4

1 に答える 1

1

まず、クエリは実際にはランダムな行をフェッチしません。最初の 4 行をフェッチします。これは、次のように解釈されるためです。つまり、「RANDOM」がテーブル エイリアスとして使用されます。

select * from Employee as RANDOM LIMIT 4

セットをランダムに並べ替えるには、次ORDER BY RANDOM()のように を使用する必要があります。

SELECT * FROM Employee ORDER BY RANDOM() LIMIT 4

RANDOM()ただし、これは (ご覧のとおり) 効率的ではありません。戻り値が予測できないため、最適化できないからです。


ランダムな Employee レコードをより速く取得するには、必要です

  1. いくつかの整数 ID 列 (あなたがそれを呼び出したと仮定しましょう_id)、および
  2. その列のインデックス (これはPRIMARY KEY列に対して自動的に行われます)。

4 つのランダム レコードを取得するには、まず_idデータベースから最大値を取得します。

SELECT MAX(_id) FROM Employee

次に、コードで 1 とその値の間の 4 つのランダムな整数を生成し、次の高速なクエリを実行します。

SELECT * FROM Employee WHERE _id IN (?,?,?,?)

従業員を削除できる場合_id、テーブルに値が存在しない可能性があります。その場合、新しい乱数を作成し、別のレコードで再試行する必要があります。

于 2013-10-15T07:51:38.233 に答える