2013-01-22 28 views
63

SQLite sonuçlarını bir liste görünümünde göstermem gerekiyor. Tabi ki sonuçları sıralamalıyım.Milyonlarca kayıtla SQLite'de etkin sayfalama

İlk seçenek LIMIT deyimini kullanmaktır. Örneğin:

SELECT * FROM Table LIMIT 100, 5000 

Sorun içten SQLite "okur" ilk 5000 kayıtları ve çok verimli olmadığıdır 5100'ünüze kayıtları 5001 döndürür.

Çok fazla kayıt olduğunda en iyi çağrı nedir?

+11

Ekstra upvote:)

daha sonra birden sıralama sütunları (ve SQLite'ı 3.15 veya var

), bunun için bir row value comparison kullanabilirsiniz LİMİT A, B'nin dezavantajını çözme! :) –

cevap

78

Lütfen her zaman ORDER BY maddesini kullanmanız gerektiğini unutmayın; Aksi takdirde, sadece bazı rastgele sıralamalar alırsınız.

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

(Bu daha detaylı on the SQLite wiki ile açıklanmaktadır: Bir sonraki sayfayı görüntülerken

ilk/son sipariş alan (lar) değerlerini görüntülenen kaydetmek verimli sayfalama yapmak ve sadece onlardan sonra devam etmek . erkekler için

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

Güzel numara, bunu bilmiyordum. Ve bağlantı için teşekkürler, çok bilgilendirici! –

+4

SomeColumn'da 101 özdeş değere sahip olduğunuz bir durum nedir? Bu daha iyi görünüyor: http://blog.ssokolow.com/archives/2009/12/23/sql-pagination-without-offset/ –

+4

@ JacekŁawrynowicz Sıralama sütunu benzersiz değilse, daha fazla sütuna göre sıralamanız gerekir . Her neyse, alternatif bir cevabınız varsa, bir cevap oluşturun. –

İlgili konular