SQL LIMIT

La clause LIMIT est à utiliser dans une requête SQL pour spécifier le nombre maximum de résultats que l’ont souhaite obtenir. Cette clause est souvent associé à un OFFSET, c’est-à-dire effectuer un décalage sur le jeu de résultat. Ces 2 clauses permettent par exemple d’effectuer des système de pagination (exemple : récupérer les 10 articles de la page 4).

ATTENTION : selon le système de gestion de base de données, la syntaxe ne sera pas pareil. Ce tutoriel va donc présenter la syntaxe pour MySQL et pour PostgreSQL.

Syntaxe simple

La syntaxe commune aux principales système de gestion de bases de données est la suivante :

SELECT *
FROM table
LIMIT 10

Cette requête permet de récupérer seulement les 10 premiers résultats d’une table. Bien entendu, si la table contient moins de 10 résultats, alors la requête retournera toutes les lignes.

Bon à savoir : la bonne pratique lorsque l’ont utilise LIMIT consiste à utiliser également la clause ORDER BY pour s’assurer que quoi qu’il en soit ce sont toujours les bonnes données qui sont présentées. En effet, si le système de tri est non spécifié, alors il est en principe inconnu et les résultats peuvent être imprévisible.

Limit et Offset avec PostgreSQL

L’offset est une méthode simple de décaler les lignes à obtenir. La syntaxe pour utiliser une limite et un offset est la suivante :

SELECT *
FROM table
LIMIT 10 OFFSET 5

Cette requête permet de récupérer les résultats 6 à 15 (car l’OFFSET commence toujours à 0). A titre d’exemple, pour récupérer les résultats 16 à 25 il faudrait donc utiliser: LIMIT 10 OFFSET 15

A noter : Utiliser OFFSET 0 reviens au même que d’omettre l’OFFSET.

Limit et Offset avec MySQL

La syntaxe avec MySQL est légèrement différente :

SELECT *
FROM table
LIMIT 5, 10;

Cette requête retourne les enregistrements 6 à 15 d’une table. Le premier nombre est l’OFFSET tandis que le suivant est la limite.

Bon à savoir : pour une bonne compatibilité, MySQL accepte également la syntaxe LIMIT nombre OFFSET nombre. En conséquent, dans la conception d’une application utilisant MySQL il est préférable d’utiliser cette syntaxe car c’est potentiellement plus facile de migrer vers un autre système de gestion de base de données sans avoir à ré-écrire toutes les requêtes.

Performance

Ce dernier chapitre est destiné à un public averti. Il n’est pas nécessaire de le comprendre entièrement, mais simplement d’avoir compris les grandes lignes.

Certains développeur pensent à tort que l’utilisation de LIMIT permet de réduire le temps d’exécution d’une requête. Or, le temps d’exécution est sensiblement le même car la requête va permettre de récupérer toutes les lignes (donc temps d’exécution identique) PUIS seulement les résultats définit par LIMIT et OFFSET seront retournés. Au mieux, utiliser LIMIT permet de réduire le temps d’affichage car il y a moins de lignes à afficher.

Partager