我需要加入两个表,但其中一个表有一个必须应用的常量过滤器,我的问题是在性能方面什么选项更好:
-
在";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
-
在主查询的
WHERE
中设置过滤器:SELECT <result fields> FROM filtered_table AS A LEFT OUTER JOIN tableB ON A.id = tableB.id WHERE a.field = value
大多数数据库都会对这两种形式进行相同的处理——它们在逻辑上是相同的,优化器知道这一点。
有些数据库倾向于实现子查询。MySQL就是其中之一。在该数据库中,子查询可能会更昂贵,因为它会写出子查询。
我建议编写不带子查询的代码。它写和读都更简单,而且性能永远不会比子查询方法差。