我正在和我的一位同事讨论过,我们一直坚持内部联接是否比自然联接更快,因为ON子句是在内部联接中指定的,因此,SQL引擎无需比较表结构来确定公共列。
请分享您的想法/答案。
答案 0 :(得分:8)
它将取决于DBMS,并且在某种程度上取决于所加入的表,并且差异通常不会是可测量的。使用INNER JOIN,将有两个公共列的副本;使用NATURAL JOIN,只有一个公共列的副本。
如果必须将中间结果写入磁盘或进行排序,则需要管理更多数据,并且通过客户端 - 服务器连接将更多数据返回给客户端,因此INNER JOIN可能需要略长于NATURAL JOIN。如果公共列足够大 - 例如,长字符字段 - 这种大小差异可能很大。
准备两种类型的连接的时间差异完全可以忽略不计。两者都必须读取连接中涉及的两个表中所有列的信息,并且该数据的处理基本相似。
在执行期间,对于NATURAL JOIN,复制数据以形成中间结果可能稍微复杂一些 - 因为您不是简单地获取每行的副本 - 但是您不一定要获取完整副本INNER JOIN的每一行也是如此,因此差异可以忽略不计。并且,和以前一样,对于NATURAL JOIN,要聚合的数据总量要少一些,因此它仍然有一个小优势。
因此,总的来说,NATURAL JOIN可能比INNER JOIN略快,但差异仍然可以忽略不计。
答案 1 :(得分:2)
我无法想象找到你可以支持这个假设的常见列是如此昂贵。
答案 2 :(得分:1)
在特殊情况下,自然连接可以像内部连接一样快速。