2013-01-22 13 views
63

SQLiteの結果をリストビューで表示する必要があります。もちろん、私は結果をページングする必要があります。数百万のレコードを持つSQLiteの効率的なページング

最初のオプションは、LIMIT句を使用することです。たとえば:

SELECT * FROM Table LIMIT 100, 5000 

それは問題は内部でSQLiteのは、最初の5000件のレコードを「読み」、それはあまりにも効率的ではないということである5100に5001のレコードを返します。

多くのレコードがあるときにページングするのに最適な方法は何ですか?

+11

エキストラupvote LIMIT A、Bの欠点を解消する! :) –

答えて

78

いつもORDER BY句を使用する必要があります。それ以外の場合は、ランダムな順序が得られます。

、効率的なページングを行う順序体(複数可)の最初/最後の表示された値を保存し、次のページを表示するときちょうどそれらの後に継続するには、次の

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

は(これは、より詳細に説明されているon the SQLite wiki 。)

あなたは複数のソート列(およびSQLiteの3.15以降)を持っている場合、あなたはこのためにrow value comparisonを使用することができます:男性のための

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

素敵なトリックは、これについて知りませんでした。リンクのおかげで、非常に有益! –

+4

SomeColumnに101の同じ値がある場合はどうなりますか?これはより良いと思われます:http://blog.ssokolow.com/archives/2009/12/23/sql-pagination-without-offset/ –

+4

@JacekŁawrynowiczソート列が一意でない場合は、さらに列をソートする必要があります。とにかく、別の答えがある場合は、答えを作成します。 –

関連する問題