0

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);工作的?它是在内部翻译成类似的东西Select A.* from A, B where A.b_id = B.id还是(select id from B)针对 A 的每一行进行评估?

4

4 回答 4

2

您可以查看这篇短文: http ://www.mysqlperformanceblog.com/2010/10/25/mysql-limitations-part-3-subqueries/

于 2011-12-02T16:09:08.020 回答
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运算符要快。

于 2011-12-02T16:07:10.443 回答
0

我不确定这些假连接来自哪里,但你应该使用 连接表ON,而不是最后的大量 WHERE。

SELECT A.*
FROM A
INNER JOIN B ON (A.b_id = B.id)
于 2011-12-02T16:08:05.403 回答
0

它取决于各种因素,包括 MySQL 版本、表的大小、索引的存在等。

您应该尝试执行EXPLAIN ...,如果支持,甚至更好,EXPLAIN EXTENDED ...然后SHOW WARNIGS;尝试了解 MySQL 正在做什么。

于 2011-12-02T16:12:17.330 回答