OFFSET PostgreSQL
La clause `OFFSET` dans PostgreSQL est utilisée pour sauter un nombre spécifié de lignes avant de commencer à retourner les lignes d'une requête. Ceci est particulièrement utile pour mettre en œuvre la pagination dans les ensembles de résultats.
Utilisation
La clause `OFFSET` est typiquement utilisée en conjonction avec `LIMIT` pour paginer les résultats de la requête en sautant un nombre spécifié de lignes. Elle est placée après la clause `ORDER BY` pour s'assurer que les lignes sont sautées dans un ordre prévisible.
SELECT column1, column2, ...
FROM table_name
[ORDER BY column]
OFFSET number_of_rows;
Dans cette syntaxe, `OFFSET nombre_de_rangs` spécifie combien de lignes doivent être omises au début du jeu de résultats.
Exemples
1. Décalage de base
SELECT *
FROM employees
OFFSET 10;
Cette requête ignore les 10 premiers tableaux du tableau `employees` et renvoie tous les tableaux suivants.
2. Décalage avec limite
SELECT *
FROM products
ORDER BY product_id
OFFSET 5
LIMIT 10;
La requête saute les 5 premières lignes et renvoie les 10 lignes suivantes, fournissant un ensemble de résultats paginés ordonnés par `product_id`.
3. Décalage avec une requête complexe
SELECT customer_id, order_date
FROM orders
WHERE order_status = 'completed'
ORDER BY order_date DESC
OFFSET 20
LIMIT 5;
Cet exemple renvoie 5 lignes après avoir ignoré les 20 premières lignes de commandes terminées, triées par `order_date` dans l'ordre décroissant.
Conseils et bonnes pratiques
- Combiner avec `LIMIT`. Utilisez `OFFSET` avec `LIMIT` pour une pagination efficace et pour éviter de récupérer des données inutiles.
- Assurer la cohérence des commandes. Associez toujours `OFFSET` à `ORDER BY` pour garantir des résultats cohérents et prévisibles.
- Considérations relatives à la performance. Soyez prudent avec les décalages importants car ils peuvent avoir un impact sur les performances puisque toutes les lignes jusqu'au point de décalage sont toujours traitées. Envisagez d'autres techniques de pagination si nécessaire.
- Indexation à base zéro. Rappelez-vous que `OFFSET` est basé sur zéro, donc `OFFSET 0` retournera toutes les lignes sans en sauter aucune.
- Autres méthodes de pagination. Pour les grands ensembles de données, envisagez d'utiliser des méthodes alternatives telles que les curseurs ou la pagination par jeu de clés, qui peuvent être plus efficaces en évitant le traitement d'un grand nombre de décalages.