Voilà ma requête en cours:sérieuses SQL Optimisation des requêtes nécessaires (MySQL)
SELECT IFNULL(sum(open_for), 0) total, count(IF(open_for > 0, 1, null)) wins, count(IF(open_for < 0, 1, null)) losses FROM `sport_points` WHERE (sportable_id = 1 and sportable_type = 'Team' and game_time > '2010-07-13 11:39:58 UTC'
Il renvoie essentiellement ces données agrégées:
EQUIPE A
- open_for
- total: 2000
- gagne: 20
- pertes: 12
Maintenant, imaginez qu'il y ait environ 6 autres colonnes dans la table dont j'ai besoin exécuter des requêtes séparées pour obtenir toutes les données agrégées spécifiques aux colonnes pour une équipe. Par exemple:
SELECT IFNULL(sum(FINAL_FOR), 0) total, count(IF(open_for > 0, 1, null)) wins, count(IF(open_for < 0, 1, null)) losses FROM `sport_points` WHERE (sportable_id = 1 and sportable_type = 'Team' and game_time > '2010-07-13 11:39:58 UTC'
EQUIPE A
- final_for
- au total: 4000
- victoires: 40
- pertes: 18
Le problème avec cette approche est que Je dois exécuter environ 6 requêtes distinctes pour toutes les colonnes bien au-dessus 200 équipes. C'est un sérieux problème de charge.
Idéalement, la requête renverrait toutes les données agrégées spécifiques aux colonnes pour une équipe - dans une requête. Il ressemblerait à ceci dans le résultat:
EQUIPE A
- open_for_total
- open_for_wins
- open_for_losses
- final_for_total
- final_for_wins
- final_for_losses
... etc ...
6 requêtes séparées Je peux comprendre, mais il semble que ces requêtes peuvent être regroupées par ID d'équipe afin que vous obteniez les résultats des 200 équipes dans les 6 requêtes différentes. 6 requêtes ne doivent pas présenter de problème de chargement avec 200 équipes. Avez-vous indexé vos tables correctement? – methodin
cette approche pourrait fonctionner ... cependant, je ne veux pas toujours les 200 équipes à la fois ... peu importe, ce peut être une option ... à quoi ressemblerait le sql? – keruilin