联接中筛选器的SQL性能与结果中的SQL性能



我需要加入两个表,但其中一个表有一个必须应用的常量过滤器,我的问题是在性能方面什么选项更好:

  1. 在";FROM";并设置这样的别名:

    SELECT <result fields> 
    FROM 
    (SELECT <table A fields> 
    FROM filtered_table 
    WHERE field = value) AS A 
    LEFT OUTER JOIN tableB ON A.id = tableB.id
    
  2. 在主查询的WHERE中设置过滤器:

    SELECT <result fields> 
    FROM filtered_table AS A 
    LEFT OUTER JOIN tableB ON A.id = tableB.id 
    WHERE a.field = value
    

大多数数据库都会对这两种形式进行相同的处理——它们在逻辑上是相同的,优化器知道这一点。

有些数据库倾向于实现子查询。MySQL就是其中之一。在该数据库中,子查询可能会更昂贵,因为它会写出子查询。

我建议编写不带子查询的代码。它写和读都更简单,而且性能永远不会比子查询方法差。

最新更新