J'ai une vue avec quelques jointures dedans. Je fais un select de cette vue avec COUNT (*) comme l'une des colonnes du select. Je suis surpris par le nombre de retours. Notez qu'il n'y a pas d'instruction GROUP BY ni de colonne d'agrégation dans la vue source à partir de laquelle la requête est dessinée.Comment déconstruire COUNT()?
Comment puis-je le démonter pour voir comment il arrive à ce numéro? J'ai trois colonnes dans la clause GROUP BY
.
SELECT column1, column2, column3, COUNT(*) FROM View GROUP BY column1, column2, column3
j'obtenir un résultat comme
+---------+---------+---------+----------+
| column1 | column2 | column3 | COUNT(*) |
+---------+---------+---------+----------+
| value1 | valueA | value_a | 103 |
+---------+---------+---------+----------+
| value2 | valueB | value_b | 56 |
+---------+---------+---------+----------+
etc.
Je voudrais voir comment il arrive à ce 103, 26, etc. En d'autres termes, je veux exécuter une requête qui renvoie 103 lignes de quelque chose, de sorte que je sais que j'ai exprimé la requête correctement. Je vérifie mon travail. Je ne dis pas que je pense que COUNT (*) ne fonctionne pas (je sais que "SELECT n'est pas cassé"), ce que je veux vérifier est exactement ce que j'exprime dans ma requête, parce que je pense que j'ai exprimé la mauvaise chose, ce qui explique pourquoi je reçois des valeurs inattendues. J'ai besoin de voir plus ce que je suis en train de diriger MySQL à compter.
Alors devrais-je les prendre un par un, et essayer chaque valeur dans une clause WHERE? En d'autres termes, dois-je faire
SELECT column1 FROM View WHERE column1 = 'first_grouped_value'
SELECT column1 FROM View WHERE column1 = 'second_grouped_value'
SELECT column2 FROM View WHERE column1 = 'first_grouped_value'
SELECT column2 FROM View WHERE column1 = 'second_grouped_value'
et voir le nombre de lignes de retour correspond à la valeur COUNT(*)
dans les résultats regroupés?
En raison de la confidentialité, je ne serai pas en mesure d'afficher la structure de la requête ou de la base de données. Tout ce que je demande est une technique générale pour voir ce que COUNT (*) compte réellement.
Soyez prudent! Les vues MySQL avec des fonctions d'agrégat (comme 'count()') fonctionnent très mal lorsque le nombre de lignes augmente. Ceci est dû à l'algorithme de vue utilisé qui provoque l'inutilisable de nombreux index. –
Il n'y a pas de colonne agrégée dans la vue elle-même, mais j'utilise une colonne agrégée dans le SELECT de la vue. Est-ce un problème? – user151841
Vous avez dit que la vue a 'count (*)' alors oui, vous utilisez une fonction d'agrégation dans la vue. Plus de détails ici http://stackoverflow.com/questions/2760475/mysql-view-performance/2760603#2760603 –