开发者

Subquery not in performance question

开发者 https://www.devze.com 2023-01-21 18:41 出处:网络
I have this slow query select * from table1 where id NOT IN ( select id from table2 ) Would this be faster by doing something like (not sure if this is possible):

I have this slow query

select * from table1 where id NOT IN ( select id from table2 )

Would this be faster by doing something like (not sure if this is possible):

select * from table1 where id not in ( select id from table2 where id = table1.id )

Or:

select * from table1 where table1.id NOT EXIST( select id from table2 where table2.id = table1.id )

Or:

select * from table1
left join table2 on table2.id = table1.id
WHERE table2.id is 开发者_运维百科null

Or do something else? Like break it up into two queries ...


The question is - are the field(s) in the comparison nullable (meaning, can the column value be NULL)?

If they're nullable...

...in MySQL the NOT IN or NOT EXISTS perform better - see this link.

If they are NOT nullable...

... LEFT JOIN / IS NULL performs better - see this link.


select table1.* from table1 
LEFT JOIN table2 ON table1.id = table2.id
WHERE table2.id IS NULL

The object being to get rid of NOT IN

0

精彩评论

暂无评论...
验证码 换一张
取 消