MySQL性能:更新vs外连接

时间:2015-02-25 13:55:51

标签: mysql performance outer-join

我有点疑惑:我明白一般的经验是外连接很快。嗯,我的情况不同: 需要根据一个公共密钥字段将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时间。

这有意义吗?她是否像瘟疫一样避免外部连接?

3 个答案:

答案 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"?