Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL élimine-t-il les sous-expressions communes entre la clause SELECT et HAVING/GROUP BY

Je pense que cela peut être testé en utilisant la fonction sleep(),
par exemple, jetez un œil à cette démo :http://sqlfiddle.com/#!2/0bc1b/1

Select * FROM t;

| X |
|---|
| 1 |
| 2 |
| 2 |

SELECT x+sleep(1)
FROM t
GROUP BY x+sleep(1);

SELECT x+sleep(1) As name
FROM t
GROUP BY name;

Les temps d'exécution des deux requêtes sont d'environ 3000 ms (3 secondes).
Il y a 3 enregistrements dans la table, et pour chaque enregistrement, la requête dort pendant 1 seconde seulement,
cela signifie donc que l'expression est évaluée une seule fois pour chaque enregistrement, pas deux.