SQL Join vs Where

时间:2014-06-07 09:15:10

标签: mysql sql

让我们说我们有两个表:

  

A(身份证,姓名,类型)

     

B(id,A_id,data)

因此从上面

  

has_many B(foreign_key:A_id)

现在我们可以说是

if B is not indexed on A_id then B INNER JOIN A will be slow ? 

还假设我们知道

SELECT * FROM B WHERE B.A_id = 100 

x秒

我们能否基于此确定INNER-JOIN将花费多少时间?

1 个答案:

答案 0 :(得分:0)

我认为确切的时间可能取决于所使用的DBMS,但它可能可以忽略不计。

从理论上讲,它们应该具有非常相似的性能,由于涉及许多不确定因素,难以辨别准确的时间:运行的进程数等等。

如果你正在使用oracle,你可以试试EXPLAIN PLAN如果你正在使用oracle,其他DBMS也有类似的系统。

联接的执行计划如下所示:

SELECT * FROM A
INNER JOIN A ON A.id = B.id;

-- 0 select statement
-- 1 hash join (access("A"."ID"="B"."ID"))
-- 2 table access full A
-- 3 table access full B

其中的执行计划如下所示:

SELECT * FROM A, B
WHERE A.id = B.id;

-- 0 select statement
-- 1 hash join (access("A"."ID"="B"."ID"))
-- 2 table access full A
-- 3 table access full B

它们应具有非常相似的性能,JOIN是ANSI标准,易于阅读且可以轻松更改为OUTER JOIN / LEFT JOIN / RIGHT JOIN,我建议您始终使用JOIN而不是WHERE