Maison > base de données > tutoriel mysql > le corps du texte

Exemple de partage d'optimisation SQL lorsque le décalage est trop important lors de la pagination MySQL

小云云
Libérer: 2017-12-25 11:16:37
original
2092 Les gens l'ont consulté

Lorsque nous affichons le contenu dans une liste, nous rencontrerons inévitablement des problèmes de pagination, car la quantité de contenu dans la liste peut être importante, mais la taille de l'interface que les utilisateurs peuvent voir en même temps est limitée, et c'est impossible d'afficher tout le contenu sur une seule interface, récupérer trop de données du backend à la fois entraînera également une pression supplémentaire sur le backend. La pagination MySQL est une fonction que nous rencontrons souvent dans le développement. Récemment, nous avons rencontré un problème lors de l'implémentation de cette fonction. Par conséquent, cet article vous présente principalement l'expérience d'optimisation SQL du décalage excessif lors de la pagination MySQL. a une certaine valeur de référence et d'apprentissage pour les études ou le travail de chacun. Les amis qui en ont besoin peuvent suivre l'éditeur pour y jeter un œil.

Habituellement, une telle instruction est utilisée lors de l'exécution de requêtes de pagination :

SELECT
*
FROM table
where condition1 = 0
and condition2 = 0
and condition3 = -1
and condition4 = -1
order by id asc
LIMIT 2000 OFFSET 50000
Copier après la connexion

Lorsque le décalage est particulièrement important, l'efficacité d'exécution de cette instruction sera considérablement réduit et l’efficacité diminue à mesure que le décalage augmente.

La raison est :

MySQL n'ignore pas la ligne de décalage, mais prend la ligne offset+N, puis renvoie la ligne de décalage Avant d'abandonner, de renvoyer N lignes, lorsque le décalage est particulièrement grand et que la donnée unique est également volumineuse, il faut obtenir plus de données pour chaque requête, ce qui sera naturellement très lent.

Plan d'optimisation :


SELECT
*
FROM table
JOIN
(select id from table
where condition1 = 0
and condition2 = 0
and condition3 = -1
and condition4 = -1
order by id asc
LIMIT 2000 OFFSET 50000)
as tmp using(id)
Copier après la connexion

ou


SELECT a.* FROM table a, 
(select id from table
where condition1 = 0
and condition2 = 0
and condition3 = -1
and condition4 = -1
order by id asc
LIMIT 2000 OFFSET 50000) b 
where a.id = b.id
Copier après la connexion

Obtenez d'abord la liste des clés primaires, puis interrogez les données cibles via la clé primaire Même si le décalage est important, de nombreuses clés primaires sont obtenues au lieu de tous les champs. données Relativement parlant, l'efficacité sera inférieure. Beaucoup d'amélioration.

Recommandations associées :

Résumé de l'optimisation MySQL - nombre total de requêtes

Résumé de la requête d'instruction SQL d'optimisation MySQL couramment utilisée méthodes

L'optimisation MySQL comprend trois aspects

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal