Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL elimina le sottoespressioni comuni tra la clausola SELECT e HAVING/GROUP BY

Penso che questo possa essere testato usando la funzione sleep(),
per esempio dai un'occhiata a questa demo: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;

I tempi di esecuzione di entrambe le query sono di circa 3000 ms ( 3 secondi ).
Ci sono 3 record nella tabella e per ogni record la query dorme solo per 1 secondo,
quindi significa che l'espressione viene valutata solo una volta per ogni record, non due.