我的意思是,如果我有以下架构:
create table tableA(
A_id number not null primary key
);
create table tableB(
B_id number not null primary key,
A_id number not null references tableA(A_id),
B_data text not null
);
create table tableC(
C_id number not null primary key,
A_id number not null references tableA(A_id),
C_data text not null
);
如果我想使用此处描述的关系检索B_data
和C_data
,则以下内容之间是否有任何区别:
select
b.B_data,
c.C_data
from
tableB b
inner join tableC c
on b.A_id = c.A_id;
和
select
b.B_data,
c.C_data
from
tableB b
inner join tableA a
on b.A_id = a.A_id
inner join tableC c
on a.A_id = c.A_id;
我怀疑大多数数据库会优化任一查询是否相同,但是有些情况下tableA
的外键约束会使tableA
的加入效率更高吗?是否存在这些查询可能产生不同结果的情况?
答案 0 :(得分:2)
您也可以直接加入他们。外键约束不会使连接更有效;索引做到这一点,它(取决于DBMS)可能是与外键不同的事情。无论哪种方式,如果有一个索引可以使用,无论你是否使用外键,都可以使用它。
答案 1 :(得分:1)
第一个版本运行正常。外键关系是关于引用完整性的,并不一定必须遍历它们。