使用带有大记录的where子句“1 = 1”的dbquery时,MYSQL性能会受到影响

时间:2012-06-04 12:36:27

标签: mysql performance where-clause where

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

我的问题是,执行时间低于两个db查询的性能有何不同

  1. Select * from Table1 where 1=1

  2. Select * from Table1

  3.   

    nos of records:159954 for table1 for one client

         

    nos of records:2452798 for table1 for second client。

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

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

    MySQL Server 5.1的版本

4 个答案:

答案 0 :(得分:1)

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

1)Select * from Table1 where 1=1  

2)Select * from Table1 

查看同一主题的其他帖子

Importance of WHERE 1 in MySQL queries

"where 1=1" statement

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

对于那些做过计算机体系结构的人,我想我们都会同意,如果你把WHERE 1 = 1更改为WHERE为真,那么计算就会减少。较少涉及寄存器,并且编译器无需将1 = 1标记为较小的计算。

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

SELECT * FROM user WHERE true AND UserID = 1

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