gpt4 book ai didi

mysql - 有没有更快的方法使用 mySQL 模拟两个包含 4000 万行的大型表的完全外部联接

转载 作者:行者123 更新时间:2023-11-30 01:27:43 24 4
gpt4 key购买 nike

我是 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 秒。到目前为止,由于执行时间过长,我还无法获得查询输出。

是否有更快的方法来执行此操作,以及如何估计执行查询所需的时间?

最佳答案

尽量用Union all而不是Union来写,因为Union会拉出distinct,需要很长时间。并使用子查询来区分 。

 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

关于mysql - 有没有更快的方法使用 mySQL 模拟两个包含 4000 万行的大型表的完全外部联接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17793247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com