0Pricing
SQL Academy · Lekcja

Podstawy LIMIT, OFFSET i paginacji

Dziel duże zbiory wyników na strony za pomocą LIMIT i OFFSET, poznaj kompromisy wydajnościowe i używaj paginacji keyset do stabilnego przewijania.

Podstawy LIMIT, OFFSET i paginacji to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

LIMIT: ograniczanie wyniku

LIMIT n zwraca co najwyżej n wierszy:

SELECT * FROM products
ORDER BY created_at DESC
LIMIT 10;

OFFSET: pomijanie pierwszych N wierszy

OFFSET k pomija pierwszych k wierszy:

-- Rows 11–20 (the second page of 10):
SELECT * FROM products
ORDER BY created_at DESC
LIMIT 10 OFFSET 10;

Paginacja = LIMIT + OFFSET

Klasyczny schemat numerowania stron:

-- Page p (1-based), page size s:
SELECT * FROM articles
ORDER BY published_at DESC
LIMIT s OFFSET (p - 1) * s;

Dlaczego OFFSET działa wolniej

OFFSET nadal wewnętrznie odczytuje każdy pomijany wiersz:

  • Strona 1 z 10 → odczytuje 10 wierszy
  • Strona 1000 z 10 → odczytuje 10 000 wierszy
  • Strona 1 000 000 → odczytuje dziesięć milionów wierszy

OFFSET ma złożoność O(offset). W przypadku głębokich stron takie rozwiązanie jest nieużyteczne.

Paginacja kluczowa („metoda seek”)

Proszę przechodzić do kolejnych stron, zapamiętując ostatni napotkany klucz sortowania:

-- 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;

Dlaczego paginacja kluczowa jest szybsza

Paginacja kluczowa korzysta ze skanowania zakresu indeksu: przeskakuje bezpośrednio do wiersza za ostatnim napotkanym wierszem, odczytuje N wierszy i kończy działanie. Koszt wynosi O(rozmiar strony) i nie zależy od głębokości paginacji.

LIMIT bez ORDER BY nie jest deterministyczne

Zasada praktyczna: zawsze należy łączyć LIMIT z ORDER BY. W przeciwnym razie baza danych może zwracać inne wiersze przy każdym wywołaniu.

-- Wrong — results may vary between runs:
SELECT * FROM events LIMIT 10;

-- Right:
SELECT * FROM events ORDER BY id DESC LIMIT 10;

Łączna liczba wyników a paginacja

Interfejs użytkownika czasami potrzebuje całkowitej liczby wierszy. Osobne zapytanie COUNT(*) jest najprostszym rozwiązaniem, ale w przypadku dużych tabel może być kosztowne:

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)

Standardowa składnia SQL odpowiadająca LIMIT:

SELECT * FROM products
ORDER BY id
FETCH FIRST 10 ROWS ONLY;

-- With offset:
-- OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY

Kursory dla ogromnych zbiorów wyników

Podczas eksportowania milionów wierszy proszę użyć kursora bazy danych lub sterownika obsługującego strumieniowanie zamiast pętli LIMIT/OFFSET:

BEGIN;
DECLARE big_cursor CURSOR FOR
  SELECT * FROM events ORDER BY id;
FETCH 1000 FROM big_cursor;
-- ...
CLOSE big_cursor;
COMMIT;

Kiedy OFFSET jest odpowiedni

OFFSET sprawdza się w przypadku płytkich stron (strony 1–10 w interfejsie użytkownika) lub małych tabel. Przy głębokiej paginacji, przewijaniu bez końca lub w API proszę użyć paginacji kluczowej.

Podsumowanie

LIMIT i OFFSET służą do paginowania zbiorów wyników.

  • Należy je zawsze łączyć z ORDER BY
  • OFFSET działa wolno przy głębokiej paginacji — w przypadku dużych stron należy przełączyć się na paginację kluczową
  • FETCH FIRST jest standardowym odpowiednikiem

Szybki test

Jaki jest najbardziej wydajny sposób paginowania w głąb dużej tabeli?

Często zadawane pytania

Czy lekcja „Podstawy LIMIT, OFFSET i paginacji” jest bezpłatna?

Tak — pełny tekst „Podstawy LIMIT, OFFSET i paginacji” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Podstawy LIMIT, OFFSET i paginacji”?

Dziel duże zbiory wyników na strony za pomocą LIMIT i OFFSET, poznaj kompromisy wydajnościowe i używaj paginacji keyset do stabilnego przewijania. Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Podstawy LIMIT, OFFSET i paginacji”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?

Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Wybieranie kolumn i wyrażeń
  2. Filtrowanie WHERE: operatory porównań i logiki
  3. ORDER BY dla jednej i wielu kolumn
  4. Podstawy LIMIT, OFFSET i paginacji
← Powrót do SQL Academy