La clause LIMIT peut être utilisée pour forcer une instruction SELECT à renvoyer un nombre spécifié d'enregistrements. LIMIT accepte un ou deux arguments numériques. Le paramètre doit être une constante entière. Si deux paramètres sont donnés, le premier paramètre spécifie le décalage de la première ligne d'enregistrement renvoyée, et le deuxième paramètre spécifie le nombre maximum de lignes d'enregistrement renvoyées . Le décalage de la ligne d'enregistrement initiale est 0 (et non 1). Ci-dessous, nous résumons les requêtes de pagination MySQL pour des cas particuliers.
mysql fournit une fonction de pagination :
SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
L'utilisation la plus simple est :
select * from table limit ?,?
Il s'agit de la requête de pagination de limite la plus simple. À utiliser avec les conditions Where :
select * from table where column > ? order by id limit ?,?
Dans la situation ci-dessus, il est recommandé de créer un index composite sur la colonne et l'identifiant.
Dans les deux cas ci-dessus, un tel SQL est suffisant pour les requêtes de pagination avec de petites quantités de données. Mais pour les tables de données comportant des millions de niveaux ou plus, si vous utilisez le SQL ci-dessus, le décalage de l'instruction de limite deviendra de plus en plus grand et la requête deviendra de plus en plus lente. Similaire à :
select * from `user` where `cate`='陕西' order by id limit 100000,10
Afin d'éviter ce type de requête, nous pouvons améliorer l'efficacité des requêtes grâce à la sous-requête.
select * from `user` where id >=(select * from `user` where `cate`='陕西' order by id limit 100000,1) and `cate`='陕西' limit 10
Grâce à l'explication, nous pouvons voir la différence entre une requête à limite directe et une sous-requête :
Requête à limite directe :
type | possible_keys | key | key_len | ref | rows | Extra |
---|---|---|---|---|---|---|
ALL | (NULL) | (NULL) | (NULL) | (NULL) | 4076607 |
Requête de pagination de sous-requête :
type | possible_keys | key | key_len | ref | rows | Extra |
---|---|---|---|---|---|---|
PRIMARY | range | PRIMARY | PRIMARY | 4 | 2038331 | Using where |
SUBQUERY | index | (NULL) | PRIMARY | 4 | 4076663 | Using index |
On peut voir que via la sous-requête, la sous-requête est effectuée sur l'index, tandis que la requête ordinaire est effectuée sur le fichier de données. De manière générale, les fichiers d'index sont beaucoup plus petits que les fichiers de données, leur exploitation est donc plus directe et efficace.
De plus, vous pouvez également utiliser la méthode join pagination
SELECT * FROM `user` AS t1 JOIN (SELECT id FROM `user` ORDER BY id LIMIT 100000, 1) AS t2 WHERE t1.id <= t2.id ORDER BY t1.id LIMIT 10;
L'efficacité de la pagination de jointure et de la pagination de sous-requête est fondamentalement au même niveau. (Cependant, les sous-requêtes doivent créer des tables temporaires en mémoire. Une fois la requête terminée, MySQL doit annuler ces tables temporaires. Cela peut être évité en les rejoignant) Avant de paginer la requête, vous pouvez porter un jugement si elle est dans les limites. nombre de pages, puis utilisez une requête de pagination de base et utilisez le traitement de pagination de sous-requête s'il est supérieur à 1.
Recommandations associées :
Exploration des performances de pagination MySQL
Cas de test d'optimisation de pagination MySQL
Guide d'optimisation des performances de pagination MySQL
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!