左外连接和OR子句很慢。过滤后可以加入吗?

时间:2017-08-09 15:55:27

标签: mysql sql join left-join

我有2张表,如下所示。 (每个表中有100万条记录)当我加入这两个表并使用OR子句执行查询时,它非常慢。是否可以加入2个表?

df_monthly$Date<-data.frame(seq(as.Date("2017/08/01"), as.Date("2017/09/05"), "months"))
> df_monthly
  item1 item2 item3 Date     
1 8     201   90    Numeric,2
6 2     41    18    Numeric,2

这很慢。 (或发生超时错误)

1. tblA

id | name
---------------------
1  | Bob
2  | carol

2. tblB

id | name
---------------------
1  | Alice
2  | carol

每个查询都不慢。

select * from `tblA` left outer join `tblB` on `tblA`.`name` = `tblB`.`name` where `tblA`.`name` = 'Alice' or `tblB`.`name` = 'Alice'

2 个答案:

答案 0 :(得分:1)

您可以使用union

select * from `tblA` where `name` = 'Alice'
union all
select * from `tblB` where `name` = 'Alice'

答案 1 :(得分:1)

我建议union all

select *
from `tblA` a left outer join
     `tblB` b
      on a.name = b.name
where a.name = 'Alice'
union all 
select *
from `tblA` a inner join
     `tblB` b
      on a.name = b.name
where b.name = 'Alice' and a.name <> 'Alice'  -- got it in the first query;