【问题标题】:SQL performance of filter in join vs in results where连接中过滤器的 SQL 性能与结果中的 SQL 性能
【发布时间】:2020-09-10 18:30:21
【问题描述】:

我需要加入 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
    

【问题讨论】:

  • 我很确定任何现代 DBMS 都会以完全相同的方式运行这两个查询。但如果您想确定,请查看execution plan

标签: sql performance query-optimization sql-tuning


【解决方案1】:

大多数数据库将这两种形式视为相同的——它们在逻辑上是相同的,优化器知道这一点。

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

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

【讨论】:

    猜你喜欢
    • 2011-04-20
    • 2012-02-12
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多