MySQL 是否消除SELECT和HAVING/GROUP BY子句之间的常见子表达式?如何测试?
要进行测试,请使用sleep()函数。
情况1 −
语法如下 −
SELECT yourColumnName+sleep(yourIntegerValue)
FROM yourTableName
GROUP BY yourColumnName+sleep(yourIntegerValue);;
情况2 − 您可以使用另一种语法,如下所示−
SELECT yourColumnName+sleep(yourIntegerValue) As anyAliasName
FROM yourTableName
GROUP BY yourAliasName;
要理解上述语法,请首先创建一个表。创建表的查询如下 −
mysql> create table sleepDemo
-> (
-> value int
-> );
Query OK, 0 rows affected (1.25 sec)
使用插入命令在表中插入一些记录。查询如下 −
mysql> insert into sleepDemo values(40);
Query OK, 1 row affected (0.18 sec)
mysql> insert into sleepDemo values(60);
Query OK, 1 row affected (0.19 sec)
mysql> insert into sleepDemo values(60);
Query OK, 1 row affected (0.10 sec)
使用SELECT可查询表中的所有记录。查询如下 −
mysql> select *from sleepDemo;
输出如下所示−
+-------+
| value |
+-------+
| 40 |
| 60 |
| 60 |
+-------+
3 rows in set (0.00 sec)
以下是消除SELECT和HAVING/GROUP BY子句之间的常见子表达式的查询。
情况1 − 查询如下 −
mysql> SELECT value+sleep(3)
-> FROM sleepDemo
-> GROUP BY value+sleep(3);
输出如下所示−
+----------------+
| value+sleep(3) |
+----------------+
| 40 |
| 60 |
+----------------+
2 rows in set (9.00 sec)
上面的查询每个值(3秒的40,3秒的60,3秒的60)需要9秒钟。
情况2 − 查询如下 −
mysql> SELECT value+sleep(3) As v
-> FROM sleepDemo
-> GROUP BY v;
输出如下所示−
+------+
| v |
+------+
| 40 |
| 60 |
+------+
2 rows in set (9.00 sec)
阅读更多:MySQL 教程
极客教程