这是我的问题。
选项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 条件,所以我担心加入这些表会导致 MySQL 的开销超过一个由每一行组成的巨大表A 代表 B 中的每一行。这真的是 INNER JOIN 的行为方式吗?
我会更具体一点:在我的例子中,A 的主键是(field1,field2)。MySQL 是否足够聪明,可以得出结论WHERE ((A.field1 = '1' AND A.field2 = '2') OR (A.field1 = '2' AND A.field2 = '1'))
不会产生超过两行,所以它会首先提取这些行,并且不会为 A 中的每一行创建 B 中所有行的表?
我试图在 SO 中找到类似的问题,但没有成功。