让我们说我们有两个表:
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
将花费多少时间?
答案 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