2017-08-09 11 views
2

私は以下のような2つのテーブルを持っています。 (各テーブルに100万レコード)2つのテーブルを結合してOR節を使用してクエリを実行すると、処理が非常に遅くなります。 2つのテーブルを結合することは可能ですか?左外部結合およびOR句が遅いです。フィルタリング後に参加することは可能ですか?

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' 

各クエリは低速ではありません。あなたはunion

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

答えて

1

を使用することができます

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

これは機能しました。ありがとうございました。 – zono

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; 
+0

あなたは 'tblA'と' tblB'の列が同じであると仮定されています。実際の状況ではこれは合理的ではないようです。これは2カラムを返しますが、OPクエリは4を返します。 –

関連する問題