i)在这两者中哪一个更有效:
Select A.* from A, B where A.b_id = B.id
或
Select A.* from A where A.b_id in (select id from B);
ii)Select A.* from A where A.b_id in (select id from B);
如何真正起作用?是否内部翻译成{A}的每一行Select A.* from A, B where A.b_id = B.id
或(select id from B)
评估?
答案 0 :(得分:2)
答案 1 :(得分:1)
这个效率更高:
Select A.* from A, B where A.b_id = B.id
是的,Select A.* from A where A.b_id in (select id from B)
有效。
并且,不,(select id from B)
不会针对每一行进行评估。它仅评估一次。
通常,JOINS比使用IN
运算符更快。
答案 2 :(得分:0)
我不确定那些假连接来自哪里,但你应该使用ON
加入表格,而不是最后的大量WHERE。
SELECT A.*
FROM A
INNER JOIN B ON (A.b_id = B.id)
答案 3 :(得分:0)
这取决于各种因素,包括MySQL版本,表的大小,索引的存在等。
你应该尝试执行EXPLAIN ...
,或者如果支持更好,EXPLAIN EXTENDED ...
后跟SHOW WARNIGS;
来尝试理解MySQL正在做什么。