选择...其中foo_id in(从...中选择id)效率

时间:2011-12-02 16:04:01

标签: mysql sql performance join select-query

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)评估?

4 个答案:

答案 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正在做什么。