我正在为一个mysql db查询性能改进任务而工作,我遇到了一个查询,其中“where子句是1 = 1”。
我的问题是,执行时间低于两个db查询的性能有何不同
Select * from Table1 where 1=1
Select * from Table1
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的版本
答案 0 :(得分:1)
两者都是相同的,因为两者都将获取所有记录,因此没有这么大的差异。这里1 = 1
永远都是真的。
1)Select * from Table1 where 1=1
2)Select * from Table1
查看同一主题的其他帖子
答案 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
我们真的在谈论非常小的计算。不太可能只是通过发布此堆栈溢出问题来节省所需的计算量。