Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Beseitigt MySQL gemeinsame Unterausdrücke zwischen der SELECT- und der HAVING/GROUP BY-Klausel?

Ich denke, das kann mit der Funktion sleep() getestet werden,
sehen Sie sich zum Beispiel diese Demo an: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;

Die Ausführungszeiten beider Abfragen betragen etwa 3000 ms ( 3 Sekunden ).
Es gibt 3 Datensätze in der Tabelle, und für jeden Datensatz ruht die Abfrage nur 1 Sekunde,
das bedeutet, dass der Ausdruck ausgewertet wird nur einmal für jeden Datensatz, nicht zweimal.