Maison > Article > base de données > Précautions pour les requêtes conditionnelles MySQL et les requêtes de pagination sous des millions de données
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 秒
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 秒
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索引
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
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
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!