これが私の質問です。
オプション1:
SELECT B.some_field FROM A
INNER JOIN B
ON A.id = B.a_id
WHERE ((A.field1 = '1' AND A.field2 = '2')
OR (A.field1 = '2' AND A.field2 = '1'))
オプション 2:
$id1 = SELECT id FROM A WHERE A.field1 = '1' AND A.field2 = '2'
$id2 = SELECT id FROM A WHERE A.field1 = '2' AND A.field2 = '1'
SELECT B.some_field FROM B WHERE B.a_id = '$id1' OR B.a_id = '$id2'
もちろん、これは疑似コードです。$id1 と $id2 には、対応する行の A.id の値が含まれている必要があります。
性能が良いのはどっち?
私が尋ねている理由は、A には WHERE 条件に適合する行が 2 つしかないことを知っているためです。そのため、テーブルを結合すると、MySQL のオーバーヘッドが、 B の各行に対して A.これは本当に INNER JOIN の動作ですか?
より具体的に説明します。私の場合、A の主キーは (field1, field2) です。MySQL は、2 行を超える行が生成されないと結論付けるのに十分賢いWHERE ((A.field1 = '1' AND A.field2 = '2') OR (A.field1 = '2' AND A.field2 = '1'))
ので、最初にこれらの行を抽出し、A の各行に対して B のすべての行のテーブルを作成しませんか?
SOで同様の質問を見つけようとしましたが、成功しませんでした。