Explication détaillée de la requête de pagination MySQL : optimisation de LIMIT et OFFSET pour les grands ensembles de données

Récemment, au travail, nous avons rencontré une exigence : la partie A a demandé d'exporter directement toutes les informations du bon de travail utilisées dans un module métier à partir de la base de données. Pour atteindre cet objectif, j'ai écrit une requête SQL et demandé au DBA de m'aider à exporter les données. Bien que le nombre de bons de travail ne soit pas important, seulement plus de 3 000, chaque bon de travail contient une grande quantité d'informations. Le DBA a effectué plusieurs opérations d'exportation. Malheureusement, chaque tentative d'exportation entraînait le blocage de la plate-forme d'exploitation et ne répondait plus.

Afin de surmonter ce problème, nous avons décidé d'utiliser la technologie de pagination de MySQL, en utilisant spécifiquement les mots-clés LIMIT et OFFSET pour diviser l'opération d'exportation en plusieurs lots. Habituellement, nous utilisons des plug-ins open source tels que pagehelper pour implémenter la pagination des pages dans nos projets, et écrivons rarement nous-mêmes une logique de pagination en SQL. Mais dans cette exigence, nous devions comprendre et utiliser en profondeur la fonction de pagination de MySQL.

LIMITDans cet article, nous explorerons en détail les mots-clés et dans MySQL OFFSETet comment gérer les requêtes paginées grâce à l'optimisation des performances pour répondre aux besoins de l'entreprise.

Qu’est-ce qu’une requête de pagination ?

Les requêtes paginées sont une technique permettant de diviser de grands ensembles de données en morceaux gérables pour un affichage page par page dans une interface utilisateur. Ceci est très courant dans les applications Web, les applications mobiles et la génération de rapports, et cela contribue à améliorer les performances et l'expérience utilisateur puisque l'intégralité des données n'a pas besoin d'être chargée en même temps.

Mots-clés de pagination

LIMITMots clés

LIMITLes mots clés sont utilisés pour limiter le nombre de lignes renvoyées dans le jeu de résultats. Sa syntaxe de base est la suivante :

SELECT * FROM 表名 LIMIT 行数;

Par exemple, pour sélectionner des informations sur les 10 tickets les plus récemment créés dans une table nommée mark_info, vous pouvez exécuter la requête suivante :

SELECT * FROM mark_info ORDER BY CREATE_TIME DESC  LIMIT 10;

OFFSETMots clés

OFFSETLes mots clés sont utilisés pour spécifier à quelle ligne du jeu de résultats commencer à renvoyer les données. Habituellement, il est LIMITutilisé avec pour obtenir un effet de pagination. Sa syntaxe est la suivante :

SELECT * FROM 表名 LIMIT 行数 OFFSET 偏移量;

ou

SELECT * FROM 表名 LIMIT 行数 , 偏移量;

L'effet de ces deux méthodes d'écriture est le même.

Par exemple, pour sélectionner les informations des 11e au 20 derniers ordres de travail créés à partir de la table mark_info, vous pouvez exécuter la requête suivante

SELECT * FROM mark_info ORDER BY CREATE_TIME DESC  LIMIT 10 OFFSET 10;

ou

SELECT * FROM mark_info ORDER BY CREATE_TIME DESC  LIMIT 10 , 10;

Exemple de requête paginée

Supposons que nous ayons une bus_work_order_operate_infotable nommée qui stocke un grand nombre d’enregistrements d’opérations d’ordre de travail. Nous espérons mettre en œuvre une fonction de pagination pour afficher des informations sur 10 opérations de bon de travail sur chaque page. Voici un exemple de la façon d'effectuer une requête paginée :

-- 第一页,显示最新的10个工单操作信息
SELECT * FROM bus_work_order_operate_info ORDER BY OPERATE_TIME DESC LIMIT 10;

-- 第二页,显示接下来的10个工单操作信息
SELECT * FROM bus_work_order_operate_info ORDER BY OPERATE_TIME DESC LIMIT 10 OFFSET 10;

-- 第三页,显示接下来的10个工单操作信息
SELECT * FROM bus_work_order_operate_info ORDER BY OPERATE_TIME DESC LIMIT 10 OFFSET 20;

-- 以此类推...

Optimisation des performances

Dans de nombreux scénarios d'application pratiques, nous ajoutons généralement une limite, un décalage, order by une clause et un index approprié, et l'efficacité est généralement bonne. Mais lorsque le décalage est très important, une grande quantité de données doit être ignorée, ce qui entraînera de gros problèmes de performances. Voici un exemple optimisé :

SQL non optimisé

SELECT * FROM bus_work_order_operate_info ORDER BY OPERATE_TIME DESC LIMIT 10 OFFSET 5000;

Analyse des requêtes

_20230902222023.png

SQL optimisé

select T1.* from bus_work_order_operate_info T1  INNER JOIN (select ID FROM bus_work_order_operate_info ORDER BY OPERATE_TIME DESC LIMIT 10 OFFSET 5000  ) T2 ON T1.ID = T2.ID;

Analyse des requêtes

_20230902222301.png

limitGrâce à l'analyse et à la comparaison des requêtes, le SQL optimisé analyse moins de lignes de données et la requête peut être plus efficace. Nous pouvons donc envisager d'utiliser cette méthode pour optimiser des décalages importants.

Résumer

Les requêtes de pagination de MySQL sont une exigence courante pour le traitement de grands ensembles de données. Comprendre LIMITl' OFFSETutilisation des mots-clés peut vous aider à implémenter efficacement les fonctions de pagination. Dans le même temps, l’optimisation des performances est également la clé pour garantir une exécution efficace des requêtes. Grâce à une configuration appropriée et à une combinaison avec d'autres stratégies d'optimisation, vous pouvez facilement relever les défis des requêtes de pagination et offrir une meilleure expérience utilisateur.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_44002151/article/details/132643681
conseillé
Classement