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
   -> );

使用insert命令在表中插入一些记录。查询如下-

mysql> insert into sleepDemo values(40);
mysql> insert into sleepDemo values(60);
mysql> insert into sleepDemo values(60);

使用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)

上面的查询为每个值花费9秒(40表示3秒,60表示3秒,60表示3秒)。

情况2-查询如下-

mysql> SELECT value+sleep(3) As v
   -> FROM sleepDemo
   -> GROUP BY v;

输出如下-

+------+
| v    |
+------+
| 40   |
| 60   |
+------+
2 rows in set (9.00 sec)