Cross Join比Inner Join快得多

时间:2016-07-18 07:20:30

标签: mysql join

在工作中我遇到了这种疑问:

select distinct psv.pack_id from pack_store_variant psv, pack p 
where p.id = psv.pack_id and p.store_id = 1 and psv.store_variant_id = 196;

成为select from table1, table2的新手我做了一些搜索,发现这基本上是两张桌子的笛卡尔积。我认为这是不必要地创建NxM行,我们可以使用常规连接,它应该工作。所以我写了这个查询:

SELECT DISTINCT pack_id from (SELECT pack_id, store_id, store_variant_id 
FROM pack JOIN pack_store_variant ON pack.id = pack_store_variant.pack_id) as comb 
where comb.store_id = 1 AND comb.store_variant_id = 196;

令人惊讶的是,当我进行比较时,第一个比我的快一个数量级。我的查询是否以某种方式吮吸?或者我不正确理解交叉连接/内部连接之间的区别吗?

1 个答案:

答案 0 :(得分:1)

您的查询不太好。您将查询拆分为两个选择。内部创建一个表,然后再次选择。这不是很有效率。我就是这样做的。

select distinct psv.pack_id from pack_store_variant as  psv
Join pack as p on p.id = psv.pack_id 
where p.store_id = 1 and psv.store_variant_id = 196;
相关问题