Maison  >  Article  >  base de données  >  Comment optimiser les performances d'affichage lorsque la clause WHERE a un impact sur les requêtes de comptage ?

Comment optimiser les performances d'affichage lorsque la clause WHERE a un impact sur les requêtes de comptage ?

DDD
DDDoriginal
2024-10-24 05:46:30912parcourir

How to Optimize View Performance When WHERE Clause Impacts Count Queries?

Optimisation des performances des vues MySQL

Question

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 ?

Réponse

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!

Déclaration:
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