代码之家  ›  专栏  ›  技术社区  ›  EralpB

SQL是否完全执行子查询?

  •  0
  • EralpB  · 技术社区  · 6 年前

    假设我有一个SQL查询,表2很大。

    select product_id, count(product_id) 
    from table1 
    where table2_ptr_id in (select id 
                            from table2 
                            where author is not null)
    

    SQL会首先执行子查询并将所有表2加载到内存中吗?比如,如果table1有10行,table2有1000万行,那么先加入然后过滤会更好吗?或者DB足够聪明,可以在编写查询时对其进行优化。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Laurenz Albe    6 年前

    你必须这样 EXPLAIN 查询以了解它正在做什么。

    SELECT product_id
    FROM table1 
    WHERE EXISTS (SELECT 1
                  FROM table2
                  WHERE table2.id = table1.table2_ptr_id
                  AND table2.author IS NOT NULL);
    

    然后,PostgreSQL可以使用反连接,这可能会在一个巨大的 table2 .

    count