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

Précautions pour les requêtes conditionnelles MySQL et les requêtes de pagination sous des millions de données

藏色散人
Libérer: 2019-04-20 09:18:25
avant
3635 Les gens l'ont consulté

Dans la continuité de la section précédente "Problème de pagination MySQL avec des millions de données", nous ajoutons les conditions de requête :

select id from news 
where cate = 1
order by id desc 
limit 500000 ,10 
查询时间 20 秒
Copier après la connexion

Quelle vitesse terrifiante ! ! Utilisez les connaissances de la première section « Introduction à l'environnement de test de données MySQL pour des millions de données » pour optimiser :

select * from news
where cate = 1 and id > (select id from news where cate = 1 order by id desc limit 500000,1 ) 
order by id desc 
limit 0,10 
查询时间 15 秒
Copier après la connexion

L'effet d'optimisation n'est pas évident, et l'impact du les conditions sont toujours aussi bonnes ! Dans de telles circonstances, quelle que soit la manière dont nous optimisons l'instruction SQL, nous ne pouvons pas résoudre le problème de l'efficacité opérationnelle. Changeons donc d'idée : créons une table d'index pour enregistrer uniquement les informations d'identification et de classification de l'article. Nous divisons le vaste champ du contenu de l'article.

表 news2 [ 文章表 引擎 myisam 字符集 utf-8 ]
-------------------------------------------------
idint11主键自动增加
cateint11索引
Copier après la connexion

Synchronisez les deux tables lors de l'écriture des données. Pour la requête, vous pouvez utiliser news2 pour effectuer une requête conditionnelle :

select * from news
where cate = 1 and id > (select id from news2 where cate = 1 order by id desc limit 500000,1 ) 
order by id desc 
limit 0,10
Copier après la connexion
Copier après la connexion

Notez que la condition id > .Faites un tableau !

Durée de fonctionnement 1,23 secondes, on constate que le temps de fonctionnement est réduit de près de 20 fois ! ! Lorsque les données avoisinent les 100 000, le temps de requête peut être maintenu aux alentours de 0,5 seconde, soit une valeur se rapprochant progressivement de ce que l'on peut tolérer !

Mais 1 seconde reste une valeur inacceptable pour le serveur ! ! Y a-t-il autre chose qui peut être optimisé ? ? Nous avons essayé un grand changement :

Changement du moteur de stockage de news2 en innodb, et les résultats ont été incroyables !

select * from news
where cate = 1 and id > (select id from news2 where cate = 1 order by id desc limit 500000,1 ) 
order by id desc 
limit 0,10
Copier après la connexion
Copier après la connexion

Cela ne prend que 0,2 seconde, ce qui est très rapide. Pourquoi y a-t-il une si grande différence ? Veuillez regarder l'article suivant pour une explication détaillée du moteur de stockage 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!

Étiquettes associées:
source:hcoder.net
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