sql >> Base de Datos >  >> RDS >> Mysql

¿MySQL elimina las subexpresiones comunes entre la cláusula SELECT y HAVING/GROUP BY?

Creo que esto se puede probar usando la función sleep(),
por ejemplo, eche un vistazo a esta demostración: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;

Los tiempos de ejecución de ambas consultas son de aproximadamente 3000 ms (3 segundos).
Hay 3 registros en la tabla, y para cada registro, la consulta duerme solo durante 1 segundo,
por lo que significa que la expresión se evalúa solo una vez para cada registro, no dos veces.