2011-09-24 3 views
0

Y a-t-il une différence majeure d'un point de vue optimisation entre les deux alternatives suivantes? Dans la première option, j'alias la table, de sorte que le calcul total_payé n'est exécuté qu'une seule fois. Dans la deuxième option, il n'y a pas d'alias de table, mais le calcul SUM est requis plusieurs fois.Optimisation de requête MySQL - alias ou non?

Option 1

SELECT tt.*, tt.amount - tt.total_paid as outstanding 
FROM 
    (
    SELECT t1.id, t1.amount, SUM(t2.paid) as total_paid 
    FROM table1 t1 
    LEFT JOIN table2 t2 on t1.id = t2.t1_id 
    GROUP BY t1.id 
) as temp_table tt 
WHERE (tt.amount - tt.total_paid) > 0 
LIMIT 0, 25 

Option 2

SELECT t1.id, t1.amount, SUM(t2.paid) as total_paid 
    , (t1.amount - SUM(t2.paid)) as outstanding 
FROM table1 t1 
LEFT JOIN table2 t2 on t1.id = t2.t1_id 
WHERE (t1.amount - SUM(t2.paid)) > 0 
GROUP BY t1.id 
LIMIT 0, 25 

Ou peut-être il y a une option encore mieux? Si vous exécutez les requêtes avec EXPLAIN, vous serez capable de voir ce qui se passe à l'intérieur de '

Répondre

1

Aussi, pourquoi ne pas simplement l'exécuter et comparer les temps d'exécution?

En savoir plus sur l'explication here