Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用带有where子句的dbquery时对MYSQL性能的影响;1=1“;有着巨大的记录_Mysql_Performance_Where Clause_Where - Fatal编程技术网

使用带有where子句的dbquery时对MYSQL性能的影响;1=1“;有着巨大的记录

使用带有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版将解释放在查询之前,或者打开查询探查器,您就会发现。我认

我正在为一个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)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标记为更小的计算

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

    选择*FROM
    user
    ,其中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”,我建议,如果不需要的话,它应该忽略它。