in在查询时首先执行子查询sql,获得结果集与主查询进行笛卡尔积,依据表关联字段进行筛选;
exists在查询时首先执行主查询sql,依据获取到的每一条信息去子查询中依据表关联字查询符合条件的数据,
因此,当子查询结果集较多时且有索引使用exists效率更高,主查询结果集较多且有索引时使用in 效率更高。
not in 在查询时主子查询都进行全表扫描,且没有用到索引;not exists的子查询会使用表中索引,所以无论主子结果集的大小
not exists执行效率都要比not in 高