研发埠

标题: SQL中的in、exists和join的查询原理? [打印本页]

作者: 孙宏雷    时间: 2013-7-16 10:52
标题: 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
作者: 淡写轻描    时间: 2013-7-16 10:59
如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in,反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。




欢迎光临 研发埠 (http://bbs.yanfabu.com/) Powered by Discuz! X3.2