“常用公式”在线计算,“设计手册”在线查询
最近遇到一个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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 支持支持 反对反对

共 1 个关于本帖的回复 最后回复于 2013-7-16 10:59

沙发
淡写轻描 新来的 发表于 2013-7-16 10:59:35 | 只看该作者
研发埠培训中心
如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in,反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注我们

360网站安全检测平台