Maison >base de données >tutoriel mysql >Comment optimiser les performances d'affichage lorsque la clause WHERE a un impact sur les requêtes de comptage ?
Une requête permettant de compter les utilisateurs dans un état spécifique montre un coût plus élevé avec une vue par rapport à une requête directe analyse de table. Comment fonctionne la clause WHERE dans les vues et comment ce problème de performances peut-il être résolu ?
Le comportement de la clause WHERE dans les vues est déterminé par l'algorithme de vue utilisé.
Généralement, dans une vue, la clause WHERE est appliquée après la vue récupère toutes les lignes de la table sous-jacente. Cet algorithme est connu sous le nom de temptable. Cependant, dans ce cas, l’algorithme tentable n’a pas été utilisé. Au lieu de cela, l'algorithme merge a été utilisé.
L'algorithme de fusion est plus efficace dans la plupart des cas mais n'est pas pris en charge lorsque la vue contient des fonctions d'agrégation (comme COUNT()) ou une clause GROUP BY. .
Pour résoudre ce problème, la définition de la vue peut être modifiée pour remplacer COUNT(*) par COUNT(DISTINCT state). Cela obligera MySQL à utiliser l'algorithme de fusion, ce qui peut améliorer considérablement les performances.
<code class="sql">CREATE OR REPLACE VIEW vw_users AS SELECT state, COUNT(DISTINCT state) AS cnt FROM users; EXPLAIN SELECT cnt FROM vw_users WHERE state = 'ca';</code>
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!