第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > mysql and 和where 关于mysql:连接sql查询中where和and子句的区别

mysql and 和where 关于mysql:连接sql查询中where和and子句的区别

时间:2020-11-14 15:55:36

相关推荐

mysql and 和where 关于mysql:连接sql查询中where和and子句的区别

本问题已经有最佳答案,请猛点这里访问。

下面两个SQL查询有什么区别

根据以下两个测试结果

速度更快(237比460)。据我所知,这是一个标准。

氧化镁

不,有细微的差别,你不能说没有差别

除了语法之外没有别的区别。

虽然只有一个简短的句子,但这仍然是一个有效的答案。

以及一个非常精确、准确和相关的答案。

它只是对on条件进行过滤,而不是添加一个where过滤器。所做的没有区别,只是没有一个地方比较慢。他的回答完全足够了

以这种方式考虑,在联接时,表中的行与其他表中的行在两个条件下(经过它两次)进行比较…而不是在连接后进行一次,然后查找非空结果。这就是为什么它更快

这不是一个正确的答案(尽管这是常见的误解)。通常,这两个命令之间没有明显的区别,因为查询优化器将重写查询以使用更好的语法。但是,这两个查询的运行顺序有着根本的区别。FROM子句在WHERE之前进行评估,并在更复杂的查询中给出截然不同的执行计划。要验证,请使用提示忽略优化器的更改,并使用解释计划查看执行路径的差异。

这很有趣-谢谢你指出这一点。如果我错了,请纠正我,只是再次回顾查询,我认为即使是结果也会与上述两个查询完全不同。查询1不会返回a.name为空的记录。查询2将返回a.name为空的记录,因为表a位于联接的左侧。如果我们从表B中选择一列,我们会看到结果显示为空,即使我们在ID上匹配。

执行联接,然后执行筛选器

在联接前执行筛选器(更好的性能)

编辑:上面是我的原始答案,下面支持它。

4个表,4个左联接,大约500000个结果,第二个查询在一半时间内运行。在测试查询效率时,您应该选择更大的工作集…或是CPU负载、RAM使用、连接时间等因素。如果您的记录少于1000条,或者流量优化有限,则很难看到或证明这一点。在生产环境中测试您的工作集并使用性能更好的东西(不仅仅是理论上的)很简单。

网址:/images/sof/22302649.jpg

您可以看到我的数据集在效率和结果上的差异。此示例使用的是MySQL数据库。

452734记录420.016秒

452747记录在214.334秒内

注意:查询是故意运行缓慢的。

我可以在4+表(内部)联接上发布10000000条记录的示例…在我的例子中,添加和到每个联接会更快,然后等待直到最后以一个where结束。快30秒以上…

表达式的语法外观与实际用于计算结果的策略无关。从未听说过"查询优化器"这个词?

你们中有人愿意看我的结果吗?您使用大型数据集吗?

欧文-你错了……句法外观与查询策略有关。优化器只知道如何编写比您更好的查询(基于对数据和元数据的复杂分析),因此更改执行计划以编写您的意思而不是编写的内容。这就是执行计划随着表中数据的变化而随时间变化的原因。但是,编写查询的顺序会影响优化器的编译。

欧文-是女士吗?我主要使用MySQL、Berkeley、SQLite和MSSQL。这个例子是mysql,尽管我可以在mssql上显示相同的结果(不同的表和数据)。我喜欢做事情,而不是让微软为我做决定。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。