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

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

[复制链接]

尚未签到

发表于 2016-10-24 07:10:49 | 显示全部楼层 |阅读模式
延续上次的实验,http://willko.iyunv.com/blog/407964
200m记录,innodb
先从小量查询开始实验,只考虑随机情况,毕竟生产环境比较少出现顺序.
20个值的情况
|        3 | 0.23469200 | SELECT * FROM Member WHERE MemberID IN (1072317,944960,232144,1221849,1718824,1971030,1634860,219179,1733544,618875,1033368,914264,1657167,687934,2164378,1675400,816727,1072638,56834,798724)                                                                                                               |
|        4 | 0.00271600 | SELECT * FROM Member WHERE MemberID = 1072317 UNION SELECT * FROM Member WHERE MemberID = 944960 UNION SELECT * FROM Member WHERE MemberID = 232144 UNION SELECT * FROM Member WHERE MemberID = 1221849 UNION SELECT * FROM Member WHERE MemberID = 1718824 UNION SELECT * FROM Member WHERE MemberID = 1971 |

50个值的情况
|        3 | 0.23469200 | SELECT * FROM Member WHERE MemberID IN (1072317,944960,232144,1221849,1718824,1971030,1634860,219179,1733544,618875,1033368,914264,1657167,687934,2164378,1675400,816727,1072638,56834,798724)                                                                                                               |
|        4 | 0.00271600 | SELECT * FROM Member WHERE MemberID = 1072317 UNION SELECT * FROM Member WHERE MemberID = 944960 UNION SELECT * FROM Member WHERE MemberID = 232144 UNION SELECT * FROM Member WHERE MemberID = 1221849 UNION SELECT * FROM Member WHERE MemberID = 1718824 UNION SELECT * FROM Member WHERE MemberID = 1971 |

500个值的情况
|       11 | 4.89638400 | SELECT * FROM Member WHERE MemberID IN (1940366,1592700,1400564,745603,439521,1782230,1627418,1968030,1173113,1406275,1157786,382329,1252380,2202431,2142859,714044,1178282,1463622,1069076,955140,2071311,647081,619895,154986,1068419,1900229,1792226,1796517,1568490,687304,2059599,912862,1797395,168722 |
|       12 | 0.07686600 | SELECT * FROM Member WHERE MemberID = 1940366 UNION SELECT * FROM Member WHERE MemberID = 1592700 UNION SELECT * FROM Member WHERE MemberID = 1400564 UNION SELECT * FROM Member WHERE MemberID = 745603 UNION SELECT * FROM Member WHERE MemberID = 439521 UNION SELECT * FROM Member WHERE MemberID = 1782 |

在一张只有100k记录的表上实验
|       18 |  0.12457700 | SELECT * FROM Product WHERE ProductID IN (11089,108843,80895,6486,91179,109813,97611,49713,90237,56495,114315,773,119650,55401,8965,61268,60379,13692,114931,71883)                                                                                                                                          |
|       19 |  0.00348100 | SELECT * FROM Product WHERE ProductID = 11089 UNION SELECT * FROM Product WHERE ProductID = 108843 UNION SELECT * FROM Product WHERE ProductID = 80895 UNION SELECT * FROM Product WHERE ProductID = 6486 UNION SELECT * FROM Product WHERE ProductID = 91179 UNION SELECT * FROM Product WHERE ProductID =  |
|       20 |  0.35769600 | SELECT * FROM Product WHERE ProductID IN (52447,28980,59590,80193,98487,22829,78756,70810,86308,60046,81279,67714,99244,89245,69998,48611,81038,17256,45283,119693,108364,97453,47837,81514,457,26157,115691,13263,102098,101610,38318,32815,101610,45720,31842,90977,53938,86167,6973,3819,22670,81914,8805 |
|       21 |  0.00640500 | SELECT * FROM Product WHERE ProductID = 52447 UNION SELECT * FROM Product WHERE ProductID = 28980 UNION SELECT * FROM Product WHERE ProductID = 59590 UNION SELECT * FROM Product WHERE ProductID = 80193 UNION SELECT * FROM Product WHERE ProductID = 98487 UNION SELECT * FROM Product WHERE ProductID =  |

注意,即使使用union,query cache还是按照整条sql来算的。
看到这样的结果,我想大家都有结论了,使用n+1比用in快n倍,估计上次实验有问题,,我们来看看他们的执行过程
这是in的情况
+--------------------------------+----------+----------+------------+--------------+---------------+
| Status                         | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
+--------------------------------+----------+----------+------------+--------------+---------------+
| starting                       | 0.000014 | 0.000000 |   0.000000 |            0 |             0 |
| checking query cache for query | 0.000048 | 0.000000 |   0.000000 |            0 |             0 |
| Opening tables                 | 0.000011 | 0.000000 |   0.000000 |            0 |             0 |
| System lock                    | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| Table lock                     | 0.000019 | 0.000000 |   0.000000 |            0 |             0 |
| init                           | 0.000039 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000007 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000047 | 0.000000 |   0.000000 |            0 |             0 |
| preparing                      | 0.000009 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000002 | 0.000000 |   0.000000 |            0 |             0 |
| Sending data                   | 0.234442 | 0.002000 |   0.001000 |            0 |             0 |
| end                            | 0.000007 | 0.000000 |   0.000000 |            0 |             0 |
| query end                      | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| freeing items                  | 0.000031 | 0.000000 |   0.000000 |            0 |             0 |
| storing result in query cache  | 0.000005 | 0.000000 |   0.000000 |            0 |             0 |
| logging slow query             | 0.000001 | 0.000000 |   0.000000 |            0 |             0 |
| cleaning up                    | 0.000004 | 0.000000 |   0.000000 |            0 |             0 |
+--------------------------------+----------+----------+------------+--------------+---------------+

n+1情况
+--------------------------------+----------+----------+------------+--------------+---------------+
| Status                         | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
+--------------------------------+----------+----------+------------+--------------+---------------+
| starting                       | 0.000015 | 0.000000 |   0.000000 |            0 |             0 |
| checking query cache for query | 0.000123 | 0.000000 |   0.000000 |            0 |             0 |
| Opening tables                 | 0.000573 | 0.000000 |   0.000000 |            0 |             0 |
| System lock                    | 0.000004 | 0.000000 |   0.000000 |            0 |             0 |
| Table lock                     | 0.000607 | 0.001000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000012 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000057 | 0.000000 |   0.000000 |            0 |             0 |
| preparing                      | 0.000007 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000002 | 0.000000 |   0.000000 |            0 |             0 |
| Sending data                   | 0.000033 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000031 | 0.000000 |   0.000000 |            0 |             0 |
| preparing                      | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000002 | 0.000000 |   0.000000 |            0 |             0 |
| Sending data                   | 0.000015 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000026 | 0.000000 |   0.000000 |            0 |             0 |
| preparing                      | 0.000002 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000001 | 0.000000 |   0.000000 |            0 |             0 |
| Sending data                   | 0.000017 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000021 | 0.000000 |   0.000000 |            0 |             0 |
| preparing                      | 0.000002 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000001 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000028 | 0.000000 |   0.000000 |            0 |             0 |
| preparing                      | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000002 | 0.000000 |   0.000000 |            0 |             0 |
| Sending data                   | 0.000024 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000030 | 0.000000 |   0.000000 |            0 |             0 |
| preparing                      | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000001 | 0.000000 |   0.000000 |            0 |             0 |
| Sending data                   | 0.000016 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000029 | 0.000000 |   0.000000 |            0 |             0 |
| preparing                      | 0.000002 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000002 | 0.000000 |   0.000000 |            0 |             0 |
| Sending data                   | 0.000022 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000024 | 0.000000 |   0.000000 |            0 |             0 |
| preparing                      | 0.000002 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000002 | 0.000000 |   0.000000 |            0 |             0 |
| Sending data                   | 0.000016 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000032 | 0.000000 |   0.000000 |            0 |             0 |
| preparing                      | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000001 | 0.000000 |   0.000000 |            0 |             0 |
| Sending data                   | 0.000016 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000025 | 0.000000 |   0.000000 |            0 |             0 |
| preparing                      | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000001 | 0.000000 |   0.000000 |            0 |             0 |
| Sending data                   | 0.000021 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000033 | 0.000000 |   0.000000 |            0 |             0 |
| preparing                      | 0.000002 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000002 | 0.000000 |   0.000000 |            0 |             0 |
| Sending data                   | 0.000022 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000027 | 0.000999 |   0.000000 |            0 |             0 |
| preparing                      | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000001 | 0.000000 |   0.000000 |            0 |             0 |
| Sending data                   | 0.000016 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000031 | 0.000000 |   0.000000 |            0 |             0 |
| preparing                      | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000002 | 0.000000 |   0.000000 |            0 |             0 |
| Sending data                   | 0.000022 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000029 | 0.000000 |   0.000000 |            0 |             0 |
| preparing                      | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000001 | 0.000000 |   0.000000 |            0 |             0 |
| Sending data                   | 0.000017 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000028 | 0.000000 |   0.000000 |            0 |             0 |
| preparing                      | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000001 | 0.000000 |   0.000000 |            0 |             0 |
| Sending data                   | 0.000018 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000002 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000034 | 0.000000 |   0.000000 |            0 |             0 |
| preparing                      | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000002 | 0.000000 |   0.000000 |            0 |             0 |
| Sending data                   | 0.000019 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000032 | 0.000000 |   0.000000 |            0 |             0 |
| preparing                      | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000002 | 0.000000 |   0.000000 |            0 |             0 |
| Sending data                   | 0.000016 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000028 | 0.000000 |   0.000000 |            0 |             0 |
| preparing                      | 0.000002 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000002 | 0.000000 |   0.000000 |            0 |             0 |
| Sending data                   | 0.000016 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000028 | 0.000000 |   0.000000 |            0 |             0 |
| preparing                      | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000001 | 0.000000 |   0.000000 |            0 |             0 |
| Sending data                   | 0.000024 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000024 | 0.000000 |   0.000000 |            0 |             0 |
| preparing                      | 0.000002 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000010 | 0.000000 |   0.000000 |            0 |             0 |
| optimizing                     | 0.000002 | 0.000000 |   0.000000 |            0 |             0 |
| statistics                     | 0.000005 | 0.000000 |   0.000000 |            0 |             0 |
| preparing                      | 0.000004 | 0.000000 |   0.000000 |            0 |             0 |
| executing                      | 0.000001 | 0.000000 |   0.000000 |            0 |             0 |
| Sending data                   | 0.000143 | 0.000000 |   0.000000 |            0 |             0 |
| removing tmp table             | 0.000004 | 0.000000 |   0.000000 |            0 |             0 |
| Sending data                   | 0.000007 | 0.000000 |   0.000000 |            0 |             0 |
| query end                      | 0.000003 | 0.000000 |   0.000000 |            0 |             0 |
| freeing items                  | 0.000048 | 0.000000 |   0.000000 |            0 |             0 |
| storing result in query cache  | 0.000018 | 0.000000 |   0.000000 |            0 |             0 |
| logging slow query             | 0.000001 | 0.000000 |   0.000000 |            0 |             0 |
| logging slow query             | 0.000043 | 0.000000 |   0.000000 |            0 |             0 |
| cleaning up                    | 0.000004 | 0.000000 |   0.000000 |            0 |             0 |
+--------------------------------+----------+----------+------------+--------------+---------------+

in的话主要耗费在sending data上,而n+1比较稳定并且比in多了临时表,sending data包括索引的查找以及数据的传输,我想in慢在查找上,因为是innodb而且是主键,只要找到主键就可以得到数据。
至于,in是怎么实现查找的,这个就不清楚了。
郁闷

运维网声明 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-290400-1-1.html 上篇帖子: mysql 新建用户及远程连接  下篇帖子: PHP100视频教程12:学习制作PHP+MYSQL留言板(下)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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