Requête de sélection MySQL lente optimisée pour améliorer les performances
Cette requête MySQL a connu des retards en raison de sa complexité et de son volume de données. Pour atténuer cela, il est essentiel de comprendre les relations entre les tables impliquées :
La requête originale, comme suit, est exposée un temps d'exécution long, notamment lorsqu'il est utilisé dans la création de pages web :
SELECT * FROM poster_prodcat, poster_data, poster_categories WHERE poster_data.apnumber = poster_prodcat.apnumber AND poster_categories.apcatnum = poster_prodcat.apcatnum AND poster_prodcat.apcatnum='623' ORDER BY aptitle ASC LIMIT 0, 32
Analyse de l'exécution Plan :
Le goulot d'étranglement des performances de la requête a été identifié dans la sortie « explain » :
[Explain Image Link]
Comme observé, la requête devait écrire des données sur le disque, ce qui a un impact significatif sur la vitesse.
Solution :
Pour Pour résoudre ce problème, un schéma révisé a été conçu à l'aide de l'indexation composite. Cette nouvelle structure a démontré des améliorations significatives des performances :
DROP TABLE IF EXISTS poster; CREATE TABLE poster ( poster_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL UNIQUE ) ENGINE = INNODB; DROP TABLE IF EXISTS category; CREATE TABLE category ( cat_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL UNIQUE ) ENGINE = INNODB; DROP TABLE IF EXISTS poster_category; CREATE TABLE poster_category ( cat_id MEDIUMINT UNSIGNED NOT NULL, poster_id INT UNSIGNED NOT NULL, PRIMARY KEY (cat_id, poster_id) -- Note the clustered composite index !! ) ENGINE = INNODB;
Avec l'index composite en place, la requête révisée suivante a produit des résultats ultra-rapides :
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;
Cette approche optimisée a résolu efficacement le problème problèmes de performances, rendant la page Web de l'application réactive et conviviale.
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!