MySQL 是否消除SELECT和HAVING/GROUP BY子句之间的常见子表达式?如何测试?

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 教程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程