报名热线:

0898-08980898

个/性/化/教/育/行/业/领/跑/者

万事注册

CURRICULUM

万事代理

0898-08980898

广东省清远市

123456789

万事新闻 >更多
万事新闻

当前位置: 首页 > 万事新闻

MYSQL之not in优化方法:left join

2024/08/26

优化思路1:在 mid? 和 uid 上建立索引后再 explain

时间下降到: 0.039s



优化思路2:采用left join 和 右表.id is null 的方法优化

 
 

没有建立索引时间: 0.031s

建立索引时间: 0.016s

飘易发现采用 left join 方法执行sql语句的时候:

没有索引的前提下,执行时间仅为not in方法的 1.6/千分 【0.031/18.898】;

建立了索引后消耗时间仅为not in(也建立索引)方法的 40% 【0.016/0.039】。

索引not in 执行时间left join?执行时间优化后时间占比
无索引18.8980.0311.6
有索引0.0390.01640%


可以看到优化后的 Handler_read_rnd_next 值下降到了22万。

注:LEFT JOIN 关键字会从左表那里返回所有的行,即使在右表中没有匹配的行。

EXPLAIN sql:



【例二】:原先的not in的sql语句2:

 
 

时间: 39.208s


可以看到 Handler_read_rnd_next 值很大,达到了 2500万,也是全表扫描导致的。



采用left join 和 右表.id is null 方法优化:

 
 

时间: 0.048s


优化后?Handler_read_rnd_next 的值下降到了 18万。



LEFT JOIN 要点:

 
 

在mysql的 left join 中条件放在on后面和在where后面是不同的;

1.?on后面只针对于t2表进行过滤,所以上面的 t1.id>1 将不起作用,切记,切记

2. where后面会对最终结果产生影响,所以如果t2.id<>3放到on后面和where后面也是会返回不同的结果;

? 例如下面脚本一会比脚本二多返回一些数据。

 
 

本文完。


关于万事娱乐 /ABOUT US
万事娱乐专注于娱乐领域,是拥有自主安全稳定的平台,在网络互娱领域拥有多项核心专利,涵盖万事注册、登录、开户、代理、招商及线路手机app客户端下载等,万事平台拥有完善的体系,致力用户提供价值高品质的服务,我们期待与您合作共赢!...

友情链接:

微信平台

手机官网

网站首页| 关于万事娱乐| 万事注册| 万事新闻| 万事登录| 万事平台| 万事开户| 万事代理| 在线报名|

平台注册入口