2013-01-22 117 views
63

我需要在列表視圖中顯示SQLite結果。當然,我需要分頁結果。SQLite中有效的分頁,數百萬條記錄

第一個選項是使用LIMIT子句。例如:

SELECT * FROM Table LIMIT 100, 5000 

它返回記錄5001到5100.問題是內部SQLite「讀取」前5000個記錄,並且效率不高。

當有很多記錄時,尋呼的最佳方法是什麼?

+11

男性額外給予好評限制A,B的缺點! :) –

回答

78

請注意,您始終必須使用ORDER BY條款;否則,你只能得到一些隨機順序。

要做到高效分頁,保存第一/最後顯示有序場(S)的值,而只是在他們以後繼續顯示下一個頁面時:

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如果排序列不是唯一的,則需要按更多列進行排序。無論如何,如果您有其他答案,請創建答案。 –