-2

我正在为一项 mysql db 查询性能改进任务工作,我遇到了一个“where 子句为 1=1”的查询。

我的问题是,以下两个数据库查询的执行时间在性能方面有什么不同

  1. Select * from Table1 where 1=1

  2. Select * from Table1

记录数:一个客户的表 1 为 159954

第二个客户的 table1 的记录数:2452798。

在某些情况下,该表与另一个具有相同 where 子句的表连接1=1

mysql查询编译器可以在执行时优化这个查询吗?

MySQL 服务器 5.1 版本

4

4 回答 4

1

两者都相同,因为两者都会获取所有记录,因此没有那么大的区别。这里1 = 1永远是真的。

1)Select * from Table1 where 1=1  

2)Select * from Table1 

请参阅同一主题的其他帖子

WHERE 1 在 MySQL 查询中的重要性

“其中 1=1”语句

于 2012-06-04T12:40:35.440 回答
1

这两个查询返回相同的行集,并且它们将具有相同的运行时间。

经常使用的原因1=1是为了简化生成计算机生成where从句的过程;所有非玩具 RDBMS 引擎的优化器都会忽略此条件,因为true. 在 Stack Overflow 上搜索有关如何1=1帮助生成查询的说明。

于 2012-06-04T12:41:41.713 回答
0

对于那些从事计算机体系结构的人,我想我们都会同意,如果将 WHERE 1 = 1 更改为 WHERE true,则计算量会减少。较少涉及寄存器,编译器无需将 1 = 1 标记为更小的计算。

因此,在您构建查询的情况下,为简单起见,您需要具备第一个条件,查询可能如下所示:

SELECT * FROM userWHERE true AND UserID = 1

真的,我们在这里谈论非常非常小的计算。不太可能仅通过发布此堆栈溢出问题来为您节省所需的计算量。

于 2012-06-10T02:05:36.390 回答
0

在您的查询之前加上解释或打开查询分析器,您会发现。我想 1=1 将是一个非常小的开销,几乎不引人注意。

于 2012-06-04T12:40:07.343 回答