7.6. LIMITE e OFFSET

LIMITE e OFFSET consentono di recuperare solo una parte delle righe generate dal resto della query:

Se viene fornito un conteggio limite, non verranno restituite più di tante righe (ma forse meno, se la query stessa produce meno righe). LIMITE TUTTO è lo stesso di omettere la clausola LIMIT.

OFFSET dice di saltare molte righe prima di iniziare a restituire le righe. OFFSET 0 equivale a omettere la clausola OFFSET., Se vengono visualizzati OFFSET e LIMITE, le righe OFFSET vengono ignorate prima di iniziare a contare le righe LIMITE restituite.

Quando si utilizza LIMIT, è importante utilizzare una clausola ORDER BY che vincola le righe dei risultati in un ordine univoco. Altrimenti si otterrà un sottoinsieme imprevedibile delle righe della query. Forse chiedete dalla decima alla ventesima fila, ma dalla decima alla ventesima in quale ordine? L’ordine è sconosciuto, a meno che non sia stato specificato ORDER BY.,

L’ottimizzatore di query tiene conto del LIMITE quando si genera un piano di query, quindi è molto probabile che si ottengano piani diversi (producendo ordini di righe diversi) a seconda di ciò che si fornisce per LIMIT e OFFSET. Pertanto, l’utilizzo di valori LIMITE/OFFSET diversi per selezionare sottoinsiemi diversi di un risultato di query fornirà risultati incoerenti a meno che non si applichi un ordine di risultato prevedibile con ORDER BY. Questo non è un bug; è una conseguenza intrinseca del fatto che SQL non promette di fornire i risultati di una query in un particolare ordine a meno che ORDER BY non venga utilizzato per vincolare l’ordine.,

Le righe saltate da una clausola di OFFSET devono ancora essere calcolate all’interno del server; quindi un OFFSET di grandi dimensioni può essere inefficiente.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *