我想在mySQL中执行左连接,这将在4个不同的标准上执行:
select
a.CommonVar, Var1, Var2, Var3
from
table1 as a
left join
table2 as b on a.CommonVar = b.CommonVar
or a.CommonVar= b.CommonVar2
or a.CommonVar = b.CommonVar3
or a.CommonVar = b.CommonVar4;
不幸的是,这需要一段难以置信的时间。任何人都可以提供任何想法,以执行此查询的另一种方式,这将产生相同的结果,但速度更快,时间更短?
提前谢谢
答案 0 :(得分:0)
尝试使用IN()
:
select a.CommonVar, Var1, Var2, Var3
from table1 as a
left join
table2 as b
WHERE a.CommonVar IN(b.CommonVar, b.CommonVar2, b.CommonVar3, b.CommonVar4);
如果表记录太多,我可能会建议对表进行分区。
答案 1 :(得分:0)
它们是单独索引还是复合索引?在这种情况下,Composite不会帮助您。我不确定是否会单独使用此类连接(查询优化器可能无法单独利用它们)。
最糟糕的情况是,你可以试试这个:
SELECT a.CommonVar, Var1, Var2, Var3
FROM table1 AS a
LEFT JOIN table2 AS b
ON a.CommonVar = b.CommonVar
UNION
SELECT a.CommonVar, Var1, Var2, Var3
FROM table1 AS a
LEFT JOIN table2 AS b
ON a.CommonVar = b.CommonVar2
UNION
SELECT a.CommonVar, Var1, Var2, Var3
FROM table1 AS a
LEFT JOIN table2 AS b
ON a.CommonVar = b.CommonVar3
UNION
SELECT a.CommonVar, Var1, Var2, Var3
FROM table1 AS a
LEFT JOIN table2 AS b
ON a.CommonVar = b.CommonVar4
;
注意不会给出完全相同的结果。如果table1中的一行仅在CommonVar上匹配,则它可能会在结果中显示两次;一次匹配,再一次没有。这可以通过将其作为子查询来解析(可能使用GROUP_CONCAT()并通过a.CommonVar 进行分组。)