以下是我对这两个关键字的总结比较,供大家参考:
一、常规比较
(1)exists 可以是多行比较
select m.* from md_query m where not exists (select * from md q where q.ipadd=m.ipadd);
(2)in 只能是单行比较
select * from md where mdh in(1232,3432,5565);
二、效率比较
EXISTS与IN的使用效率的问题,通常情况下采用exists要比in效率高,
三、使用情况比较
例:大表(A)、小表(B)
(1)IN适合于外表大而内表小的情况;
select * from A where id in(select id from B);
(2)EXISTS适合于外表小而内表大的情况
select * from B where id exists (select id from A);
(3)如果A表和B表大小相当,那么查询效率是没有大差别的
(1)(2)(3)原因:
in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询;