1,in在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。所以相对内表比较小的时候,in的速度较快
比如有张表order表,
另外一张表为user表
求出order. user_id 在user.id存在的数据。
SELECT * FROM USER u WHERE u.id IN(SELECT ORDER.USER_ID FROM ORDER);
得出结果为
2,exist
SELECT * FROM USER u WHERE exits (SELECT ORDER.USER_ID FROM ORDER);
3,exist 和 in 性能比较
一直以来认为exists 比in 效率高的说法是不准确的。如果查询的两个表大小相当,那么用in 和exists 差别不大。
如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in。也就是说 IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况,这样效率会高的