简体   繁体   中英

Cross Join much faster than Inner Join

At work I came across this sort of query:

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;

Being new to the select from table1, table2 I did a bit of searching and found out this does basically a cartesian product of the two tables. I thought that this is unnecessarily creating NxM rows, we can just use a regular join and it should work. So I wrote this query:

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;

Surprisingly when I did the comparison, the first one was an order of magnitude faster than mine. Does my query suck somehow? Or am I not understanding the difference between cross join/inner join properly?

Your query is not so good. You split your query into two selects. The inner one creates a table, on which you then select again. That's not very efficient. This is how I would do it.

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;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM