我需要在列表視圖中顯示SQLite結果。當然,我需要分頁結果。SQLite中有效的分頁,數百萬條記錄
第一個選項是使用LIMIT子句。例如:
SELECT * FROM Table LIMIT 100, 5000
它返回記錄5001到5100.問題是內部SQLite「讀取」前5000個記錄,並且效率不高。
當有很多記錄時,尋呼的最佳方法是什麼?
我需要在列表視圖中顯示SQLite結果。當然,我需要分頁結果。SQLite中有效的分頁,數百萬條記錄
第一個選項是使用LIMIT子句。例如:
SELECT * FROM Table LIMIT 100, 5000
它返回記錄5001到5100.問題是內部SQLite「讀取」前5000個記錄,並且效率不高。
當有很多記錄時,尋呼的最佳方法是什麼?
請注意,您始終必須使用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;
好戲,不知道這個。並感謝您的鏈接,非常翔實! –
如何處理SomeColumn中101個相同的值?這似乎更好:http://blog.ssokolow.com/archives/2009/12/23/sql-pagination-without-offset/ –
@JacekŁawrynowicz如果排序列不是唯一的,則需要按更多列進行排序。無論如何,如果您有其他答案,請創建答案。 –
男性額外給予好評限制A,B的缺點! :) –