Maison  >  Article  >  base de données  >  Problème de pagination MySQL sous des millions de données

Problème de pagination MySQL sous des millions de données

藏色散人
藏色散人avant
2019-04-17 17:23:343712parcourir

Nous utilisons souvent la pagination pendant le processus de développement. La technologie de base consiste à utiliser la limite pour lire les données. Lors du test d'utilisation de la limite pour la pagination, les données suivantes ont été obtenues :

select * from news order by id desc limit 0,10
耗时0.003秒
select * from news order by id desc limit 10000,10
耗时0.058秒
select * from news order by id desc limit 100000,10 
耗时0.575秒
select * from news order by id desc limit 1000000,10
耗时7.28秒

Nous avons été surpris de constater que lorsque le volume de données est important, plus le point de départ de la pagination dans MySQL est grand, plus le processus est lent. vitesse de requête. Pour les requêtes à partir de 1 million La vitesse prend déjà 7 secondes. C’est une valeur que nous ne pouvons pas accepter !

Plan d'amélioration 1

select * from news 
where id >  (select id from news order by id desc  limit 1000000, 1)
order by id desc 
limit 0,10

Le temps de requête est de 0,365 seconde, l'amélioration de l'efficacité est très évidente ! ! Quel est le principe ? ? ?

Nous avons utilisé des conditions pour filtrer l'identifiant. Dans la sous-requête (sélectionner l'identifiant dans l'ordre des nouvelles par limite d'identifiant desc 1000000, 1), nous avons uniquement interrogé le champ identifiant par rapport à la sélection * ou à la sélection de plusieurs champs. de surcharge de requête !

Plan d'amélioration 2

Convient aux systèmes avec identifiants continus, extrêmement rapide !

select * from news 
where id  between 1000000 and 1000010 
order by id desc

ne convient pas aux requêtes avec des conditions et des identifiants discontinus. Très vite !

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer