业务需求:
公司有个CRM经纪人管理系统,前天遇到的比较棘手的问题是,要查询一张表中不在另一张表中的所有用户并分页显示,但问题是外表的数据量很大,如果用not in(select ..),not exists(select ...)之类的子查询 的话需要对子查询表进行所有信息的调用过滤才行,一单子查询数据量过大效率问题就来了,于是就私下里查了一点资料,并根据资料中提供的例子建立了对应的测试表做了一些测试,随后将解决问题的方法移交给了技术部的邹鸿同事去解决问题,因为是前天的事情了,本来是事情忙没时间写日志的,就是这个事情没有做个笔记已经两天没睡好觉了,于是乎今天来了还是做一下笔记,分享给大家的好,如果大家有更好的办法 或者 说有bug疑问,请随时Email联系 摘取天上星 happy.yin@qq.com
下面是一组测试的JOIN 、EXISTS 效率对比
先将profiling打开,用来一会查看sql执行时间
set profiling=1;
exists 子查询与 join联接效率的对比
EXPLAIN SELECT film_id, language_id FROM sakila.film
WHERE NOT EXISTS(
SELECT