Există în esență două modalități de a face paginarea în baza de date (presupun că utilizați SQL Server):
Utilizarea funcției OFFSET
Alții au explicat modul în care funcția de clasificare ROW_NUMBER() OVER()
poate fi utilizată pentru a efectua pagini. Merită menționat faptul că SQL Server 2012 a inclus în final suport pentru standardul SQL OFFSET Clauza FETCH
:
SELECT first_name, last_name, score
FROM players
ORDER BY score DESC
OFFSET 40 ROWS FETCH NEXT 10 ROWS ONLY
Dacă utilizați SQL Server 2012 și compatibilitatea înapoi nu este o problemă, probabil că preferați această clauză, deoarece va fi executată mai optim de SQL Server în cazuri de colțuri.
Utilizarea metodei SEEK
Există un mod complet diferit, mult mai rapid, dar mai puțin cunoscut, de a efectua paginarea în SQL. Aceasta este deseori numită "metoda de căutare", așa cum este descrisă în acest blog post aici .
SELECT TOP 10 first_name, last_name, score
FROM players
WHERE (score < @previousScore)
OR (score = @previousScore AND player_id < @previousPlayerId)
ORDER BY score DESC, player_id DESC
The @previousScore
and @previousPlayerId
values are the respective values of the last record from the previous page. This allows you to fetch the "next" page. If the ORDER BY
direction is ASC
, simply use >
instead.
Cu ajutorul metodei de mai sus, nu puteți sări imediat la pagina 4 fără să fi preluat mai întâi cele 40 de înregistrări anterioare. Dar de multe ori nu vrei să sari atât de departe. În schimb, obțineți o interogare mult mai rapidă, care ar putea fi capabilă să preia datele în timp constant, în funcție de indexare. În plus, paginile dvs. rămân "stabile", indiferent dacă datele de bază se modifică (de exemplu, la pagina 1, în timp ce vă aflați la pagina 4).
Aceasta este cea mai bună modalitate de a implementa paginarea atunci când leneșul încărc mai multe date în aplicațiile web, de exemplu.
Rețineți că "metoda de căutare" este numită și paginarea cu chei .