SELECT *
FROM class_a
WHERE id IN ( SELECT id FROM class_b);
SELECT *
FROM class_a A
WHERE EXISTS (
SELECT *
FROM class_b B
WHERE A.id = B.id
);
分析
上述两种方法查询结果一样,但exists 方式速度要快。分析如下:
如果连接列id 上有索引,那么查询CLASS_B时,无需查询实际表,仅需要查索引就可以了。
使用exists ,那么只有查到一行数据满足条件就会终止查询,不会产生临时表。
使用in查询时,数据库首先会执行子查询,然后将结果保存在临时表中,然后扫描整个临时表,很多情况下非常耗费资源。
总结
exists 方式查询 比 in 方式查询效率高,但in 可读性较好。建议尽可能使用exists方式,避免使用子查询,除非in 的参数为数值列表