我有这个慢查询
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
还是做点什么?就像把它分成两个问题一样......
答案 0 :(得分:8)
问题是 - 比较中的字段是否为nullable(意思是,列值是否为NULL)?
...在MySQL中,NOT IN
或NOT EXISTS
表现更好 - 请参阅this link。
... 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的对象