1. ホーム
  2. sqlite

[解決済み] 数百万レコードを扱うSQLiteの効率的なページング

2022-09-15 18:57:08

質問

SQLiteの結果をリストビューで表示する必要があります。もちろん、私は結果をページングする必要があります。

最初の選択肢は、LIMIT句を使うことです。例えば

SELECT * FROM Table LIMIT 100, 5000

5001から5100のレコードを返します。問題は、内部的にSQLiteは最初の5000レコードを"reads"しており、あまり効率的でないことです。

レコード数が多い場合のページングについて、どのような方法が良いでしょうか?

どのように解決するのですか?

常に ORDER BY 節を使用することに注意してください。そうでない場合は、順序は任意です。

効率的なページングを行うには、順序付けられたフィールドの最初と最後の表示値を保存し、次のページを表示するときにその直後を続行します。

SELECT *
FROM MyTable
WHERE SomeColumn > LastValue
ORDER BY SomeColumn
LIMIT 100;

(これはより詳細に説明されています を参照してください。 .)

複数のソートカラムがある場合 (および SQLite 3.15 以降) は、ソートカラムに 行値比較 を使うことができます。

SELECT *
FROM MyTable
WHERE (SomeColumn, OtherColumn) > (LastSome, LastOther)
ORDER BY SomeColumn, OtherColumn
LIMIT 100;