【问题标题】:LEFT OUTER JOIN with an OR condition <- kills db server带有 OR 条件的 LEFT OUTER JOIN <- 杀死数据库服务器
【发布时间】:2013-04-03 09:25:59
【问题描述】:

简而言之..

SELECT * 
FROM tbl1 
LEFT OUTER JOIN tbl2 ON tbl1.ID = tbl2.externalRefID 
WHERE tbl1.varref = '12345' OR tbl2.varref = '12345';

对于这些表中的任何数据量,此查询都需要很长时间。然而,我需要第二个外部连接的表,因为它通常不会与 externalRefID 匹配。为所有被引用的列创建索引,但没有区别,因为我需要跨多个表的索引(这可能吗?)

这一定很明显,但我看不到树木的树林......

【问题讨论】:

  • 请为这两个表发布 DDL。你用的是什么 mysql 引擎 InnoDB,MyISAM?

标签: mysql join outer-join


【解决方案1】:

您是否考虑过将查询重构为 UNION 查询?

SELECT *
  FROM tbl1 INNER JOIN tbl2 ON tbl1.id = tbl2.externalRefId
 WHERE tbl2.varref = '12345'
UNION
SELECT *
  FROM tbl1 OUTER JOIN tbl2 ON tbl1.id = tbl2.externalRefId
 WHERE tab.1.varref = '12345'

您也可以在此使用 UNION ALL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 2014-11-24
    • 2015-09-05
    • 1970-01-01
    • 2014-03-16
    • 2020-03-11
    • 2011-01-30
    相关资源
    最近更新 更多