我在这样的MySQL数据库上有一个左连接。。。
select *
from tableA
left join tableB on (tableA.id=tableB.id1 and tableB.col2='Red')
…在表A和表B上的行数大于500K时执行正常
但是,将其更改为此(并假设索引正常)。。。
select *
from tableA
left join tableB on
((tableA.id=tableB.id1 and tableB.col2='Red') OR
(tableA.id=tableB.id2 and tableB.col2='Blue') )
…从性能上来说,是致命的。
那为什么演出成功?我能换个方式吗?
最佳答案
编辑
不确定你需要什么
你能展示一些预期的结果吗
你能告诉我们你所说的“在性能上杀死它”是什么意思吗
我不认为它更有效,但试试看。
select
*
from
tableA as a
left join tableB as b1
on a.id=b1.id1
and b1.col2='Red'
left join tableB as b2
on a.id=b2.id2
and b2.col2='Blue'
where
(b1.id1 is not null or b2.id2 is not null)
or (b1.id1 is null and b2.id2 is null)
你必须用
SELECT
来管理CASE WHEN
中的结果。。。您可以比较性能并将索引放在适当的列上(取决于完整表和查询中的内容,但这里应该是
id, id1 and col2
)关于mysql - SQL-使用OR运算子(MySQL)左联接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22926885/