内部加入与自然加入,速度方面?

Jul*_*Lam 9 mysql inner-join

我正在与我的一位同事进行讨论,我们仍然坚持内部连接是否比自然连接更快,这仅仅是因为在内部连接中指定了ON子句,因此SQL引擎无需比较表结构来确定公共列.

请分享您的想法/答案.

Jon*_*ler 8

它将取决于DBMS,并且在某种程度上取决于所加入的表,并且差异通常不会是可测量的.使用INNER JOIN,将有两个公共列的副本; 使用NATURAL JOIN,只有一个公共列的副本.

如果必须将中间结果写入磁盘或进行排序,则需要管理更多数据,并且通过客户端 - 服务器连接将更多数据返回给客户端,因此INNER JOIN可能需要比天然的加入.如果公共列足够大 - 例如,长字符字段 - 这种大小差异可能很大.

准备两种类型的连接的时间差异完全可以忽略不计.两者都必须读取连接中涉及的两个表中的所有列的信息,并且该数据的处理基本相似.

在执行期间,对于NATURAL JOIN,复制数据以形成中间结果可能稍微复杂一些 - 因为您不是简单地获取每一行的副本 - 但是您不必为每一行获取完整副本一个内部联接,所以差异可以忽略不计.并且,和以前一样,对于NATURAL JOIN,要聚合的数据总量要少一些,因此它仍然有一个小优势.

因此,总的来说,NATURAL JOIN可能比INNER JOIN略快,但差异仍然可以忽略不计.