Maison > base de données > tutoriel mysql > Comment optimiser le temps d'exécution des requêtes MySQL pour les grands ensembles de données ?

Comment optimiser le temps d'exécution des requêtes MySQL pour les grands ensembles de données ?

Susan Sarandon
Libérer: 2024-11-26 01:38:11
original
813 Les gens l'ont consulté

How to Optimize MySQL Query Execution Time for Large Datasets?

Optimisation du temps d'exécution des requêtes MySQL

Lorsque vous travaillez avec de grandes bases de données, le temps d'exécution des requêtes devient un facteur crucial. Dans l’un de ces scénarios, une base de données de site Web contenant 1 million d’enregistrements rencontrait des temps d’exécution excessifs pour les requêtes. Un exemple de requête, présenté ci-dessous, a démontré ce problème :

select * from `ratings` order by id limit 499500, 500
Copier après la connexion

Malgré l'opinion selon laquelle la gestion d'un million d'enregistrements dans les tables MySQL ne devrait pas poser de problèmes, l'exécution de cette requête prenait systématiquement plus d'une minute. L'ajout d'un index sur la colonne id n'a pas réussi à atténuer ce problème.

Cependant, après examen du plan EXPLAIN pour cette requête, il a été découvert que la requête utilisait une approche d'analyse de table complète :

explain select * from `ratings` order by id limit 499500, 500;
+----+-------------+---------+------+---------------+------+---------+------+---------+----------------+
| id | select_type | table   | type | possible_keys | key  | key_len | ref  | rows    | Extra          |
+----+-------------+---------+------+---------------+------+---------+------+---------+----------------+
|  1 | SIMPLE      | ratings | ALL  | NULL          | NULL | NULL    | NULL | 4718592 | Using filesort |
+----+-------------+---------+------+---------------+------+---------+------+---------+----------------+
Copier après la connexion

Pour résoudre ce problème, il a été suggéré d'utiliser une clause Where pour affiner les critères de recherche. Lorsqu'une clause Where a été ajoutée, le plan de requête a changé :

explain select * from `ratings` where id>=499501 limit 500;
+----+-------------+---------+-------+---------------+---------+---------+------+---------+-----------------------+
| id | select_type | table   | type  | possible_keys | key     | key_len | ref  | rows    | Extra                 |
+----+-------------+---------+-------+---------------+---------+---------+------+---------+-----------------------+
|  1 | SIMPLE      | ratings | range | PRIMARY       | PRIMARY | 4       | NULL | 4198581 | Using index condition |
+----+-------------+---------+-------+---------------+---------+---------+------+---------+-----------------------+
Copier après la connexion

Ce changement a conduit la requête à utiliser une approche de condition d'indexation, améliorant considérablement son temps d'exécution.

De plus, la possibilité de un blocage dans le processus d'exécution des requêtes ne peut être exclu. Pour diagnostiquer les blocages, la commande SHOW INNODB STATUS peut être utile.

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal