我有点疑惑:我明白一般的经验是外连接很快。嗯,我的情况不同: 需要根据一个公共密钥字段将sds表中的一个字段添加到药品表中:
select drug.*, sds.name
from drug
left outer join sds
on drug.id = sds.id;
表格大小: 药物25,000行 sds 65,000行 在字段上匹配24,000行" id" 两个表都在id字段
上编制索引上面的第一个查询在2分钟后没有返回结果,然后我中止了。
所以我用临时表重新编写查询:
create temporary table tmp select *, space( 50) as name from drug;
create index id on tmp ( id);
update tmp, sds
set tmp.name = sds.name
where tmp.id = sds.id;
所有这些共同花费不到一秒的CPU时间。
这有意义吗?她是否像瘟疫一样避免外部连接?
答案 0 :(得分:0)
以下是INNER与OUTER联接的一个很好的解释。你会看到每个人都有它的位置,但他们也有权衡。
What is the difference between "INNER JOIN" and "OUTER JOIN"?
再次阅读你的问题后......我真的认为你应该看一下INNER JOIN,因为你说了24,000个匹配的行。
SELECT
d.*,
s.name
FROM
drug d INNER JOIN sds s on d.id = s.id;
这应该只返回匹配的24,000行并且要快得多,因为您在查询时排除了两个表中的行。
答案 1 :(得分:0)
尝试检查(我认为没有理由使用外部):
select drug.*, sds.name
from drug
left join sds
on drug.id = sds.id;
答案 2 :(得分:0)
sql未指定是使用左外连接还是右外连接,因此默认为完全外连接。然后sql将返回药物和sds的联合,即药物中的所有行和sds中的所有行。
就维恩图而言,内部联接通常会为您提供相交的图表部分。
详细了解联接: What is the difference between "INNER JOIN" and "OUTER JOIN"?