Maison >base de données >tutoriel mysql >Comment la restructuration de bases de données peut-elle optimiser une requête MySQL lente et éliminer les E/S disque ?
Optimisation des requêtes MySQL pour réduire le temps d'exécution et éliminer les E/S disque
Dans un scénario d'application Web typique, les performances d'une requête de base de données est crucial pour maintenir une expérience utilisateur réactive. Cet article traite d'une requête MySQL spécifique qui présentait des temps d'exécution lents, entraînant de mauvaises performances du site Web.
La requête en question rejoint trois tables : "poster_data", "poster_categories" et "poster_prodcat". Il vise à récupérer les données des tables en fonction d'une condition spécifique sur la table "poster_prodcat". Le plan d'exécution des requêtes a révélé l'implication de la table "poster_prodcat" et son écriture sur le disque, indiquant une récupération de données inefficace.
Pour résoudre le problème de performances, nous avons exploré une approche alternative qui implique de restructurer la base de données et les requêtes. Plus précisément, nous avons créé de nouvelles tables nommées « poster », « category » et « poster_category ». La table "poster_category" a été conçue avec un index composite clusterisé sur les colonnes (cat_id, poster_id).
Avec ce nouveau schéma, nous avons réécrit la requête d'origine comme suit :
SELECT p.*, c.* FROM poster_category pc INNER JOIN category c ON pc.cat_id = c.cat_id INNER JOIN poster p ON pc.poster_id = p.poster_id WHERE pc.cat_id = 623 ORDER BY p.name LIMIT 32;
Le Le plan EXPLAIN pour la requête réécrite révèle une amélioration significative des performances. La requête utilise désormais efficacement les index, réduisant ainsi le besoin d'E/S disque et minimisant le temps d'exécution.
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!