一 案例
1.1 说明
常规来说,left join语法 要比 写 in 效率高,查询快,但是万事有特殊情况,如下sql:
DESC
SELECT a.business_depart,b.user_id,c.name FROM bocai_ip_list AS a ,bocai_department_admin AS b, bocai_ip_list AS c WHERE
b.department_abbr=a.business_depart AND a.id='1057279' AND c.id=b.user_id
DESC
SELECT id,NAME FROM bocai_ip_list WHERE id IN (
SELECT b.user_id FROM bocai_ip_list AS a ,bocai_department_admin AS b WHERE
b.department_abbr=a.business_depart AND a.id='1057279'
)
using where;using index 为何第一个执行是这个,而第二个是using where;using index;LooseScan第二个比第一个高效呢?
1.2 分析说明
第二条用 IN 子查询触发了**MySQL 的 LooseScan 索引跳跃优化,这条 SQL 因为结果集小 + 索引完美,IN 触发了 LooseScan(索引跳跃扫描),**反而比多表 JOIN 更快。比第一条三表 JOIN 的全量匹配更快,所以更高效。