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

Eliminerer MySQL almindelige underudtryk mellem SELECT og HAVING/GROUP BY-sætning

Jeg tror, ​​at dette kan testes ved hjælp af sleep()-funktionen,
tag for eksempel et kig på denne 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;

Udførelsestiderne for begge forespørgsler er omkring 3000 ms ( 3 sekunder ).
Der er 3 poster i tabellen, og for hver post sover forespørgslen kun i 1 sekund,
så det betyder, at udtrykket evalueres kun én gang for hver post, ikke to gange.



  1. 3 måder at finde rækker, der indeholder store bogstaver i MySQL

  2. Sådan giver du alle privilegier til root-brugeren i MySQL 8.0

  3. Sådan erstattes et regex-mønster i MySQL

  4. MySQL:BESTIL AF med tom dato '0000-00-00' som sidst men resten ASC