【问题标题】:Is there a quicker way to Emulate Full Outer Join of two Large Tables with 40 million rows using mySQL有没有更快的方法来使用 mySQL 模拟两个具有 4000 万行的大表的完全外连接
【发布时间】:2013-07-22 17:00:14
【问题描述】:

我是 mySQL 的新手。我正在尝试使用 mySQL 模拟完整的外部联接。我有两个表,每个表的格式如下: 表:

id1 | id2 | id3 | id4 | id5 |价值

--a-|--b--|--c--|-d--|--e---| 1

--g-|--h--|--i--|--j--|--k--| 1

--w-|--x-|--y--|-z---|--e---| 1

前五列是键,即没有两行具有相同的键列表。 我正在使用以下 mySQL 脚本。

SELECT t1.id1, t1.id2, t1.id3, t1.id4, t1.id5, t1.value, t2.value 
FROM table1 t1 
LEFT JOIN table2 t2 
ON t1.id1=t2.id1 
AND t1.id2=t2.id2 
AND t1.id3=t2.id3 
AND t1.id4=t2.id4 
AND t1.id5=t2.id5  
UNION
SELECT t2.id1, t2.id2, t2.id3, t2.id4, t2.id5, t1.value, t2.value 
FROM table1 t1 
RIGHT JOIN table2 t2 
ON t1.id1=t2.id1 
AND t1.id2=t2.id2 
AND t1.id3=t2.id3 
AND t1.id4=t2.id4 
AND t1.id5=t2.id5 ;

这个查询花费了很多时间,我还把连接读取超时时间增加到了 6000 秒。到目前为止,由于执行时间过长,我一直无法获得查询输出。

有没有更快的方法来做到这一点,我如何估计执行查询所需的时间?

【问题讨论】:

    标签: mysql query-optimization full-outer-join


    【解决方案1】:

    尝试使用 Union all 而不是 Union 来编写。因为 Union 会拉出不同的东西,这需要很长时间。并使用子查询来区分。

     select distinct t1.id1,*
    (SELECT t1.id1, t1.id2, t1.id3, t1.id4, t1.id5, t1.value, t2.value 
    FROM table1 t1 
    LEFT JOIN table2 t2 
    ON t1.id1=t2.id1 
    AND t1.id2=t2.id2 
    AND t1.id3=t2.id3 
    AND t1.id4=t2.id4 
    AND t1.id5=t2.id5  
    UNION all
    SELECT t2.id1, t2.id2, t2.id3, t2.id4, t2.id5, t1.value, t2.value 
    FROM table1 t1 
    RIGHT JOIN table2 t2 
    ON t1.id1=t2.id1 
    AND t1.id2=t2.id2 
    AND t1.id3=t2.id3 
    AND t1.id4=t2.id4 
    AND t1.id5=t2.id5 )A
    

    【讨论】:

      猜你喜欢
      • 2011-03-27
      • 2016-09-15
      • 1970-01-01
      • 2017-10-19
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 2023-04-10
      相关资源
      最近更新 更多