使用带有where子句的dbquery时对MYSQL性能的影响;1=1“;有着巨大的记录
我正在为一个mysql db查询性能改进任务工作,我在下面的一个查询中遇到了“where子句为1=1” 我的问题是,在执行时间低于两db的查询时,性能有什么不同使用带有where子句的dbquery时对MYSQL性能的影响;1=1“;有着巨大的记录,mysql,performance,where-clause,where,Mysql,Performance,Where Clause,Where,我正在为一个mysql db查询性能改进任务工作,我在下面的一个查询中遇到了“where子句为1=1” 我的问题是,在执行时间低于两db的查询时,性能有什么不同 从表1中选择*,其中1=1 从表1中选择* 记录数量:一个客户的表1记录数量为159954 记录数量:第二个客户的表1为2452798 在某些情况下,此表与另一个具有相同where子句的表连接1=1 mysql查询编译器能否在执行时优化此查询 MySQL Server 5.1版将解释放在查询之前,或者打开查询探查器,您就会发现。我认
从表1中选择*,其中1=1
从表1中选择*
1=1
mysql查询编译器能否在执行时优化此查询
MySQL Server 5.1版将解释放在查询之前,或者打开查询探查器,您就会发现。我认为1=1是一个非常小的开销,几乎不值得注意 两者都是相同的,因为它们都将获取所有记录,因此没有这么大的区别。此处
1=1
始终为真
1)Select * from Table1 where 1=1
2)Select * from Table1
请参阅这篇关于同一主题的其他帖子
这两个查询返回相同的行集,它们将具有相同的运行时间
通常使用
1=1
的原因是为了简化计算机生成where
子句的过程;所有非toy RDBMS引擎的优化器都会将此条件忽略为true
。在堆栈溢出上搜索1=1
如何帮助生成查询的解释。对于那些使用计算机体系结构的人,我想我们都会同意,如果将WHERE 1=1改为WHERE true,计算量会减少。较少涉及寄存器,编译器无需将1=1标记为更小的计算
因此,在构建查询的情况下,为了简单起见,您需要具备第一个条件,查询可能如下所示:
选择*FROMuser
,其中true和UserID=1
实际上,我们这里讨论的是非常非常小的计算。仅发布此堆栈溢出问题不太可能节省您所需的计算量。我建议您进行简单的时间分析。例如:托马斯,如果没有得到相对的答案,我将如何接受它?如果我接受了任何答案,这是否意味着没有更多的响应?@javaamtho可能是@GeorgeStocker的重复,看起来是一样的,但我在这里担心的是对数据库性能的影响。我不处理动态查询impl。正如mysql Optimizer如何处理“1=1”一样。Rahul,感谢您的快速回复,但就nos而言,记录是巨大的。这会有什么不同吗?这就是我提到的
否
;因为两个查询在逻辑上是相同的。它们将获取所有N
记录。好的:),那么具有单个值的“IN”运算符和“=”运算符又如何呢?我已经验证了这一点,并发现ms在性能上没有什么不同。。你的看法是什么?我从未测试过,但是其中col1 IN(val)
和其中col1=val
肯定不会产生巨大的性能差异;既然你的DB引擎将把<代码>(Val1)整平成一个“堆栈”。@ javaMtho,如果它回答了你的问题,就把它当作一个答案。我已经看到了一些对我的DQuQuy执行的影响,其中WHERE子句“1=1”,我建议,如果不需要的话,它应该忽略它。