取得一张表的数据不在另一张表中的最优秀方法(JOIN与EXISTS的效率研究)

业务需求:

公司有个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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值