加入一行表:子查询还是交叉连接?

时间:2014-09-11 05:01:42

标签: sql postgresql sql-execution-plan

  • 查询1号

    select 
          table2.someClmn,table1.name,table1.address 
    from 
          table1 cross join table2 
    where table1.id = 123
    
  • 查询2号

      select 
           (select someClmn from table2),table1.name,table1.address 
      from table1
      where table1.id = 123
    

两个查询都会返回完全相同的结果,因此最好使用?
注意:在我的情况下,table2仅包含单行


query no.1query no.2

的EXPLAIN ANALYZE

2 个答案:

答案 0 :(得分:2)

根据解释输出和table2只包含一行的特殊情况因素,我希望第二个计划更快。

避免嵌套循环将是一个重大胜利。

请注意,如果子查询是带有WHERE子句的正常相关子查询,而不是这个单行不相关的子查询,那么事情会有所不同。这两个查询可能会产生相同的计划。

答案 1 :(得分:0)

我建议您使用您(和其他人)可以阅读和理解的查询,因为不应该有太多的性能问题。