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 '