0

私はそのようなテーブルを持っています:

CREATE TABLE IF NOT EXISTS grades(_id, timestamp, extra);

「タイムスタンプ」にインデックスを作成したいので、次のようにします。

CREATE INDEX idx_timestamp ON grades(timestamp); 

タイムスタンプに基づいて一度に20レコードを選択したいので、次のようにします。

SELECT * FROM grades WHERE timestamp > 123 ORDER BY timestamp ASC LIMIT 20;

では、「タイムスタンプ」列を定義するためのより効率的な方法はありますか?インデックス付きの列として指定するだけで、並べ替え順序に「ASC」を指定するのは無理だと思います。または、最初にタイムスタンプで事前に並べ替えられたレコードを保存するようにsqliteに指示できますか?

私は基本的にページングシステムを実装しようとしています。一度に20アイテムの時系列順に並べられたページを選択します。

ありがとう

4

1 に答える 1

0

これで問題ありません。順序付けにインデックスを使用するため、速度が向上します。ただし、何をしているのかによっては、いくつかのレコードをキャッシュしたい場合があります。

SELECT * FROM grades WHERE timestamp > 123 ORDER BY timestamp ASC LIMIT 200;

一度に 200 を取得できるようになりましたが、ここでは javascript またはサーバーにページングを処理させます。基本的に、ページングがどこにあるかを追跡し、必要な場合にのみデータベースに再度アクセスします。また、タイムスタンプに限定された WHERE 句を使用することで、実際には非常に高速で効率的です。LIMIT N,M を使用するよりも優れています。

2 番目のオプションを実行すると、ヒットする頻度に応じて、そのクエリもキャッシュできます。したがって、複数の人が何かをクエリし続けている場合、データベースはそれをキャッシュし、既にそこにあるため、非常に高速に返されます。

于 2012-06-18T00:25:31.513 に答える