sql >> Databasteknik >  >> RDS >> Mysql

Eliminerar MySQL vanliga underuttryck mellan SELECT och HAVING/GROUP BY-satsen

Jag tror att detta kan testas med sleep()-funktionen,
ta till exempel en titt på denna 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;

Exekveringstiderna för båda frågorna är cirka 3000 ms ( 3 sekunder ).
Det finns 3 poster i tabellen, och för varje post sover frågan endast i 1 sekund,
så det betyder att uttrycket utvärderas endast en gång för varje post, inte två gånger.



  1. Använda index, använda temporärt, använda filesort - hur fixar man detta?

  2. Oracle Intervju frågor

  3. Generera enheter från databasen

  4. PHP:Dynamisk rullgardinsmeny med optgroup