设为首页 收藏本站
查看: 374|回复: 0

[经验分享] mysql中批量查询使用in还是n+1?

[复制链接]

尚未签到

发表于 2016-10-20 09:50:24 | 显示全部楼层 |阅读模式
某日,在一LAMP群里,讨论这个,有些人倾向于in,有些人倾向n+1(用union组合结果),还说是baidu的dba去他们公司培训说一定要使用n+1.。
其实,我看未必,使用in的话搜索只需走扫描一次索引就好了,因为是rang,从最小值扫到最大值。而使用n+1的话,每条sql都需从树根开始往下扫描,这样反而遍历的索引数多了。
所以,我的看法是,当值之间比较相近(顺序)的时候使用in,当值之间分隔比较远(随机)的话使用n+1。当然,只是猜测。
在一台机器上实验,存储引擎使用innodb,数据量1m条。
当只有20个值的情况
|        1 | 0.00100000 | 顺序  in
|        2 | 0.00300100 | 顺序  n+1  
|        3 | 0.02265800 | 随机  in
|        4 | 0.00201200 | 随机 n+1

当只有20个值的情况
|        6 | 0.00124700 | 顺序 in  
|        7 | 0.00614000 | 顺序 n+1  
|        8 | 0.00431300 | 随机 in
|        9 | 0.00458700 | 随机 n+1

当只有50个值的情况
|       10 | 0.00125100 | 顺序 in
|       11 | 0.00926500 | 顺序 n+1  
|       12 | 0.00769100 | 随机 in
|       13 | 0.01016400 | 随机 n+1

当只有200个值的情况
|       15 | 0.00231500 | 顺序 in
|       16 | 0.06058700 | 顺序 n+1
|       17 | 0.01531700 | 随机 in
|       18 | 0.02295500 | 随机 n+1

当只有500个值的情况
|        1 | 0.00097000 | 顺序 in
|        2 | 0.00182400 | 顺序 n+1
|        3 | 0.00098000 | 随机 in
|        4 | 0.08855100 | 随机 n+1

当只有1000个值的情况
|        6 | 0.01431000 | 顺序 in
|        7 | 0.69286300 | 顺序 n+1  
|        8 | 0.04851800 | 随机 in
|        9 | 0.16052700 | 随机 n+1

当顺序的时候,和我猜测的一样,使用in快。
但是随机的时候,还是in快,具体原因没想明白,可能和值的随机性以及sql的解释有关。
如果,in快的原因没猜错的话,可以考虑用混合方式。
不过,我认为如果这类型的sql没给你带来很大的性能问题,就不要再上面浪费时间了。。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-288784-1-1.html 上篇帖子: MySQL索引的概念及数据库索引的应用 下篇帖子: mysql 导出表结构和表数据 mysqldump用法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表