子查询不在性能问题中

Mar*_*del 5 mysql sql performance subquery

我有这个慢查询

select * from table1 where id NOT IN ( select id from table2 )
Run Code Online (Sandbox Code Playgroud)

这样做会更快(不确定是否可行):

select * from table1 where id not in ( select id from table2 where id = table1.id )
Run Code Online (Sandbox Code Playgroud)

要么:

select * from table1 where table1.id NOT EXIST( select id from table2 where table2.id = table1.id )
Run Code Online (Sandbox Code Playgroud)

要么:

select * from table1
left join table2 on table2.id = table1.id
WHERE table2.id is null
Run Code Online (Sandbox Code Playgroud)

或者做点什么?就像分解成两个查询一样......

OMG*_*ies 8

问题是 - 比较中的字段是否为nullable(意思是,列值是否为NULL)?

如果它们可以为空......

...在MySQL中NOT INNOT EXISTS表现更好 - 请参阅此链接.

如果它们不可为空......

...... LEFT JOIN / IS NULL表现更好 - 请看这个链接.