繁体   English   中英

连接中过滤器的 SQL 性能与结果中的

[英]SQL performance of filter in join vs in results where

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

  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就是其中之一。 在该数据库中,子查询可能会更昂贵,因为它会写出子查询。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM