Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O MySQL elimina subexpressões comuns entre a cláusula SELECT e HAVING/GROUP BY


Acho que isso pode ser testado usando a função sleep(),
por exemplo, dê uma olhada nesta demonstração: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;

Os tempos de execução de ambas as consultas são cerca de 3000 ms ( 3 segundos ).
Existem 3 registros na tabela, e para cada registro a consulta dorme por apenas 1 segundo,
assim significa que a expressão é avaliada apenas uma vez para cada registro, não duas vezes.