子查询不在性能问题中

时间:2010-10-26 02:47:36

标签: sql mysql performance subquery

我有这个慢查询

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

通过做类似的事情会更快(不确定这是否可行):

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

或者:

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

或者:

select * from table1
left join table2 on table2.id = table1.id
WHERE table2.id is null

还是做点什么?就像把它分成两个问题一样......

2 个答案:

答案 0 :(得分:8)

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

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

...在MySQL中,NOT INNOT EXISTS表现更好 - 请参阅this link

如果他们 NOT 可以为空......

... LEFT JOIN / IS NULL效果更好 - 请参阅this link

答案 1 :(得分:1)

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

要摆脱NOT IN的对象