Difference between where and and clause in join sql query
下面两个SQL查询有什么区别
和
号
根据以下两个测试结果
速度更快(237比460)。据我所知,这是一个标准。
。
氧化镁
除了语法之外没有别的区别。
- 虽然只有一个简短的句子,但这仍然是一个有效的答案。
- 以及一个非常精确、准确和相关的答案。
- 它只是对on条件进行过滤,而不是添加一个where过滤器。所做的没有区别,只是没有一个地方比较慢。他的回答完全足够了
- 以这种方式考虑,在联接时,表中的行与其他表中的行在两个条件下(经过它两次)进行比较…而不是在连接后进行一次,然后查找非空结果。这就是为什么它更快
- 这不是一个正确的答案(尽管这是常见的误解)。通常,这两个命令之间没有明显的区别,因为查询优化器将重写查询以使用更好的语法。但是,这两个查询的运行顺序有着根本的区别。FROM子句在WHERE之前进行评估,并在更复杂的查询中给出截然不同的执行计划。要验证,请使用提示忽略优化器的更改,并使用解释计划查看执行路径的差异。
- 这很有趣-谢谢你指出这一点。如果我错了,请纠正我,只是再次回顾查询,我认为即使是结果也会与上述两个查询完全不同。查询1不会返回a.name为空的记录。查询2将返回a.name为空的记录,因为表a位于联接的左侧。如果我们从表B中选择一列,我们会看到结果显示为空,即使我们在ID上匹配。
执行联接,然后执行筛选器
在联接前执行筛选器(更好的性能)
编辑:上面是我的原始答案,下面支持它。
4个表,4个左联接,大约500000个结果,第二个查询在一半时间内运行。在测试查询效率时,您应该选择更大的工作集…或是CPU负载、RAM使用、连接时间等因素。如果您的记录少于1000条,或者流量优化有限,则很难看到或证明这一点。在生产环境中测试您的工作集并使用性能更好的东西(不仅仅是理论上的)很简单。
网址:http://www.beaudurant.com/images/sof/22302649.jpg
您可以看到我的数据集在效率和结果上的差异。此示例使用的是MySQL数据库。
452734记录420.016秒
452747记录在214.334秒内
注意:查询是故意运行缓慢的。
- 我可以在4+表(内部)联接上发布10000000条记录的示例…在我的例子中,添加和到每个联接会更快,然后等待直到最后以一个where结束。快30秒以上…
- 表达式的语法外观与实际用于计算结果的策略无关。从未听说过"查询优化器"这个词?
- 你们中有人愿意看我的结果吗?您使用大型数据集吗?
- 欧文-你错了……句法外观与查询策略有关。优化器只知道如何编写比您更好的查询(基于对数据和元数据的复杂分析),因此更改执行计划以编写您的意思而不是编写的内容。这就是执行计划随着表中数据的变化而随时间变化的原因。但是,编写查询的顺序会影响优化器的编译。
- 欧文-是女士吗?我主要使用MySQL、Berkeley、SQLite和MSSQL。这个例子是mysql,尽管我可以在mssql上显示相同的结果(不同的表和数据)。我喜欢做事情,而不是让微软为我做决定。