关闭

in与exist

240人阅读 评论(0) 收藏 举报
分类:

select * from table_a a where a.id in (select b.id from table_b b);

select * from table_a a where  exists(select b.id from table_b b where a.id=b.id);


如上两个查询语句,in语句只执行了一次,它查出b表中的所有id字段并缓存起来。然后,检查a表的id是否与b表中的id相等,如果相等则将a表的记录加入结果集中,直到遍历完a表的所有记录.exists()会执行a.length次,它并不缓存exists()结果集,因为exists()结果集的内容并不重要,重要的是结果集中是否有记录,如果有则返回true,没有则返回false.

一般的in适用于b表数据量较小的情况,exists适用于a表数据量较小的情况。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:11582次
    • 积分:255
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:3篇
    • 译文:0篇
    • 评论:0条
    文章分类