SQL中的in、exists和join的查询原理?
最近遇到一个SQL性能问题。SQL语句如下:SELECT * FROM aWHERE id NOT IN(SELECT a_id FROM b)。根据网上的优化方案将NOT IN更改为NOT EXISTS或LEFT JOIN / a_id IS NULL方式,但效果没有改变,反而NOTEXISTS会更慢,最终将b表的a_id添加索引,三种方式的性能均有很大提升,但三种方式之间并没有很大差别。所以想请教一下这三种方式的查询原理到底是什么?为什么大家都会推荐将IN方式换为EXISTS和LEFT JOIN/NULL呢?测试环境:ubuntu 12.04 server 64bit + mysql 5.0 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in,反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。
页:
[1]