Maison  >  Article  >  base de données  >  Explication de l'exemple de requête de pagination Mysql

Explication de l'exemple de requête de pagination Mysql

小云云
小云云original
2018-01-30 17:22:441708parcourir

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn