mysql not exists 和 not in对比

not exists比not in效率高
如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not exists的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。 



分析:
1. select * from A where not exists (select * from B where B.id = A.id);
用了B的索引; 和exists的查询方式一样


2. select * from A where A.id not in (select id from B);
等价于:
select * from A where A.id != 1 and A.id != 2 and A.id != 3;//select id from B的返回值是1,2,3
可以知道not in是个范围查询,这种!=的范围查询无法使用任何索引,等于说A表的每条记录,都要在B表里遍历一次,查看B表里是否存在这条记录

你可能感兴趣的:(mysql)