Basi di LIMIT, OFFSET e paginazione
Pagini grandi insiemi di risultati con LIMIT e OFFSET, comprenda i compromessi prestazionali e usi la paginazione keyset per uno scorrimento stabile
Basi di LIMIT, OFFSET e paginazione è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.
LIMIT: limita il risultato
LIMIT n restituisce al massimo n righe:
SELECT * FROM products
ORDER BY created_at DESC
LIMIT 10;OFFSET: salta le prime N righe
OFFSET k salta le prime k righe:
-- Rows 11–20 (the second page of 10):
SELECT * FROM products
ORDER BY created_at DESC
LIMIT 10 OFFSET 10;Paginazione = LIMIT + OFFSET
Il classico schema basato sul numero di pagina:
-- Page p (1-based), page size s:
SELECT * FROM articles
ORDER BY published_at DESC
LIMIT s OFFSET (p - 1) * s;Perché OFFSET rallenta
OFFSET continua a leggere internamente ogni riga saltata:
- Pagina 1 di 10 → legge 10 righe
- Pagina 1000 di 10 → legge 10.000 righe
- Pagina 1.000.000 → legge dieci milioni di righe
OFFSET è O(offset). Per le pagine molto profonde, questo approccio è inutilizzabile.
Paginazione keyset ("metodo seek")
Passi alla pagina successiva memorizzando l'ultima chiave di ordinamento visualizzata:
-- 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;Perché keyset è più veloce
Keyset utilizza una scansione per intervallo dell'indice: passa direttamente alla riga successiva all'ultima visualizzata, legge N righe e termina. Il costo è O(dimensione della pagina), indipendentemente dalla profondità della pagina.
LIMIT senza ORDER BY non è deterministico
Regola generale: abbini LIMIT sempre a ORDER BY. In caso contrario, il database può restituire righe diverse a ogni chiamata.
-- Wrong — results may vary between runs:
SELECT * FROM events LIMIT 10;
-- Right:
SELECT * FROM events ORDER BY id DESC LIMIT 10;Conteggi totali e paginazione
A volte l'interfaccia deve conoscere il numero totale di righe. Una query COUNT(*) separata è la soluzione più semplice, ma nelle tabelle grandi può essere costosa:
SELECT COUNT(*) FROM articles WHERE author_id = $1;
-- Alternative for huge tables: estimate from pg_class.reltuples or use approximate counts.FETCH FIRST (SQL standard)
Sintassi SQL standard equivalente a LIMIT:
SELECT * FROM products
ORDER BY id
FETCH FIRST 10 ROWS ONLY;
-- With offset:
-- OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLYCursori per insiemi di risultati enormi
Per esportare milioni di righe, utilizzi un cursore del database o un driver con streaming invece di cicli con LIMIT/OFFSET:
BEGIN;
DECLARE big_cursor CURSOR FOR
SELECT * FROM events ORDER BY id;
FETCH 1000 FROM big_cursor;
-- ...
CLOSE big_cursor;
COMMIT;Quando OFFSET va bene
OFFSET va bene per pagine poco profonde (pagine da 1 a 10 di un'interfaccia) o per tabelle piccole. Per la paginazione profonda, lo scorrimento infinito o le API, utilizzi keyset.
Riepilogo
LIMIT e OFFSET consentono di paginare gli insiemi di risultati.
- Li combini sempre con ORDER BY
- OFFSET rallenta con pagine profonde: passi a keyset per le pagine di grandi dimensioni
- FETCH FIRST è l'equivalente standard
Verifica rapida
Qual è il modo più efficiente per eseguire la paginazione in profondità su una tabella grande?
Impara SQL con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 46
- Lezioni
- 183
Domande Frequenti
La lezione «Basi di LIMIT, OFFSET e paginazione» è gratuita?
Sì — il testo completo di «Basi di LIMIT, OFFSET e paginazione» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.
Cosa imparerò in «Basi di LIMIT, OFFSET e paginazione»?
Pagini grandi insiemi di risultati con LIMIT e OFFSET, comprenda i compromessi prestazionali e usi la paginazione keyset per uno scorrimento stabile Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare SQL Academy?
Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Basi di LIMIT, OFFSET e paginazione»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione SQL Academy?
Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Selezionare colonne ed espressioni
- Filtri WHERE: operatori di confronto e logici
- ORDER BY con una o più colonne
- Basi di LIMIT, OFFSET e paginazione