Grunnleggende om LIMIT, OFFSET og paginering
Sideinndel store resultatsett med LIMIT og OFFSET, forstå ytelsesavveiningene, og bruk keyset-paginering for stabil rulling.
Grunnleggende om LIMIT, OFFSET og paginering er en gratis leksjon i SQL Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i SQL Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i SQL Academy inneholder totalt 4 leksjoner.
LIMIT: Begrens resultatet
LIMIT n returnerer høyst n rader:
SELECT * FROM products
ORDER BY created_at DESC
LIMIT 10;OFFSET: Hopp over de første N
OFFSET k hopper over de første k radene:
-- Rows 11–20 (the second page of 10):
SELECT * FROM products
ORDER BY created_at DESC
LIMIT 10 OFFSET 10;Sideinndeling = LIMIT + OFFSET
Det klassiske mønsteret for sidenummerering:
-- Page p (1-based), page size s:
SELECT * FROM articles
ORDER BY published_at DESC
LIMIT s OFFSET (p - 1) * s;Hvorfor OFFSET blir tregere
OFFSET leser fortsatt internt hver rad som hoppes over:
- Side 1 med 10 rader → leser 10 rader
- Side 1000 med 10 rader → leser 10 000 rader
- Side 1 000 000 → leser ti millioner
OFFSET er O(offset). For dype sider er dette ubrukelig.
Keyset-sideinndeling ("seek-metoden")
Gå fremover én side om gangen ved å huske den sist viste sorteringsnøkkelen:
-- First page:
SELECT * FROM articles
ORDER BY published_at DESC, id DESC
LIMIT 20;
-- Next page — pass the last seen (published_at, id):
SELECT * FROM articles
WHERE (published_at, id) < ($1, $2)
ORDER BY published_at DESC, id DESC
LIMIT 20;Hvorfor keyset er raskere
Keyset bruker en indeksskanning av et intervall: hopp direkte til raden etter den sist viste raden, les N rader, og bli ferdig. Kostnaden er O(sidestørrelse), uavhengig av hvor langt ute i resultatet du befinner deg.
LIMIT uten ORDER BY er ikke-deterministisk
Tommelfingerregel: Kombiner LIMIT alltid med ORDER BY. Ellers kan databasen returnere forskjellige rader ved hvert kall.
-- Wrong — results may vary between runs:
SELECT * FROM events LIMIT 10;
-- Right:
SELECT * FROM events ORDER BY id DESC LIMIT 10;Totalt antall rader og sideinndeling
Brukergrensesnittet trenger noen ganger det totale antallet rader. En separat COUNT(*)-spørring er den enkleste løsningen, men på store tabeller kan den være kostbar:
SELECT COUNT(*) FROM articles WHERE author_id = $1;
-- Alternative for huge tables: estimate from pg_class.reltuples or use approximate counts.FETCH FIRST (standard SQL)
Standard SQL-syntaks for LIMIT:
SELECT * FROM products
ORDER BY id
FETCH FIRST 10 ROWS ONLY;
-- With offset:
-- OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLYMarkører for enorme resultatsett
Ved eksport av millioner av rader bør du bruke en databasemarkør eller en driver for strømming i stedet for løkker med LIMIT/OFFSET:
BEGIN;
DECLARE big_cursor CURSOR FOR
SELECT * FROM events ORDER BY id;
FETCH 1000 FROM big_cursor;
-- ...
CLOSE big_cursor;
COMMIT;Når OFFSET er greit
OFFSET fungerer fint for grunne sider (side 1–10 i et brukergrensesnitt) eller for små tabeller. Ved dyp sideinndeling, uendelig rulling eller API-er bør du bruke keyset.
Oppsummering
LIMIT og OFFSET deler resultatsett inn i sider.
- Kombiner dem alltid med ORDER BY
- OFFSET blir tregt langt ute i resultatet – bytt til keyset for store sider
- FETCH FIRST er den standardiserte ekvivalenten
Hurtigsjekk
Hva er den mest effektive måten å dele inn en stor tabell i sider langt ute i resultatet?
Lær deg SQL med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 46
- Leksjoner
- 183
Ofte stilte spørsmål
Er leksjonen «Grunnleggende om LIMIT, OFFSET og paginering» gratis?
Ja – hele teksten i «Grunnleggende om LIMIT, OFFSET og paginering» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av SQL Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i SQL Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Grunnleggende om LIMIT, OFFSET og paginering»?
Sideinndel store resultatsett med LIMIT og OFFSET, forstå ytelsesavveiningene, og bruk keyset-paginering for stabil rulling. Du øver på SQL Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med SQL Academy?
Ingen tidligere erfaring er nødvendig. SQL Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Grunnleggende om LIMIT, OFFSET og paginering»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne SQL Academy-leksjonen?
Ja. Alle SQL Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Velge kolonner og uttrykk
- WHERE-filtre: sammenlignings- og logikkoperatorer
- ORDER BY med én eller flere kolonner
- Grunnleggende om LIMIT, OFFSET og paginering