Maison >base de données >tutoriel mysql >Comment implémenter une requête de pagination dans MySQL

Comment implémenter une requête de pagination dans MySQL

coldplay.xixi
coldplay.xixioriginal
2020-10-23 09:23:524969parcourir

Méthode de requête de pagination MySQL : 1. Utilisez des champs spécifiques au lieu de [*] ; 2. Recherchez d'abord l'index ; 3. Utilisez [entre ... et], l'identifiant doit être continuellement croissant ; la page précédente L'identifiant où se trouve l'enregistrement.

Comment implémenter une requête de pagination dans MySQL

Méthode de requête de pagination MySQL :

Brève description

  • Habituellement dans MySQL, limit #{limit}, #{offset} est utilisé pour effectuer des requêtes de pagination.

  • Lorsqu'il y a de nombreux enregistrements dans la table et que le nombre de pages (#{limit}) est grand, l'efficacité de la requête de pagination devient plus lente.

  • La raison du ralentissement est que lors de l'interrogation dans les pages, les enregistrements de limite + décalage seront interrogés en premier, puis les enregistrements de décalage suivants seront interceptés.

  • Cet article prend la table big_table de 140 millions de personnes comme exemple pour enregistrer comment optimiser les requêtes de pagination.

Description du test

  • Table de test : big_table, volume de données : 140 millions.

SQL original (4500 ms)

-- 原始分页查询,耗时:4500ms
select * 
from big_table
limit 2000000,10;

Raisons de la lenteur :

1 La condition de requête est *

2. = 2000000 est trop gros

Optimisation 1 (recommandée) : Remplacer * par des champs spécifiques (1600 ms)

-- 用明确字段代替*,耗时:1600ms
select id,uid,media_id,media_name,news_id,comment 
from big_table
limit 2000000,10;

Optimisation 2 : Rechercher d'abord dans l'index (450 ms )

-- 方法1:先对索引进行分页查询,耗时:450ms
select * from big_table AS h inner join
 (select id from big_table
  limit 2000000,10) AS ss 
 on h.id = ss.id;
-- 方法2:先查询出起始位置的索引,耗时:450ms
select * from big_table
where id > (
select id from big_table limit 2000000,1
)
limit 10;

Optimisation 3 : entre … et (5ms)

Restriction : l'id doit être en augmentation continue.

-- 上一页保留最后一条记录所在id,耗时:5ms
select * from big_table
where id between 4882489 and 4882489 + 10 ;

Optimisation 4 (recommandée) : Conserver l'identifiant de l'enregistrement sur la page précédente (5ms)

Limitation : Nécessité de conserver l'identifiant du dernier enregistrement sur la page précédente

-- 上一页需要保留最后一条记录所在id,耗时:5ms
select * from big_table
where id > 4882488
limit 10;

Plus de recommandations d'apprentissage gratuites associées : tutoriel mysql(vidéo)

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