SQL Academy · Lezione

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

Lezione 4 di 413 passaggi

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 ONLY

Cursori 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?

Gratis per iniziare

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

  1. Selezionare colonne ed espressioni
  2. Filtri WHERE: operatori di confronto e logici
  3. ORDER BY con una o più colonne
  4. Basi di LIMIT, OFFSET e paginazione
← Torna a SQL Academy