在一个插入MySQL中插入多行

weixin_38088241 2019-09-12 12:01:02
我已经使用python脚本使用多行插入方法在MySQL中进行了批量插入.我的测试csv文件只包含100,000行(真正的一行包含数百万行).所以我执行批量插入. 通过使用unix time命令,结果看起来像 for 10 lines 100 lines 1000 lines user 13.675 seconds user 11.948 seconds user 9.908 seconds sys 0.192 seconds sys 0.076 seconds sys 0.080 seconds for 10,000 lines 100,000 lines user 11.672 seconds user 12.024 seconds sys 0.072 seconds sys 0.079 seconds 为了使它更简单我添加用户sys和结果 10 rows 13.867 seconds 100 rows 12.024 seconds 1000 rows 9.988 seconds 10000 rows 11.744 seconds 100,000 rows 12.103 seconds 我试图弄清楚多行插入在500-1000行左右的主要原因是什么,它在500行以上1000线以上变得适得其反.我通过互联网搜索并找到了不同的答案.有人提到它取决于 max_allowed_packet, bulk_insert_buffer_size, key_buffer_size . 我尝试这些参数,但无法看到任何效果. 我的问题是为什么批量插入在每个插入物500-1000行之间是最佳的,并且除了这个范围之外它的反生产率以及主要因素是什么.我已经在使用这个设置了 max_allowed_packet=16M 还有一些参数. Table Non_unique Key_name Seq_in_index Column_name roy_table 0 PRIMARY 1 id Collation Cardinality Sub_part Packed Null Index_type A 100650 NULL NULL BTREE 有些人可以指出一个关于批量插入效率的基准或任何想法如何解决为什么这在某一点上反效果.我必须在报告中给出坚实的理由.我会非常感谢任何小小的暗示或想法.感谢名单
...全文
141 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38094491 2019-09-12
  • 打赏
  • 举报
回复
>经过的时间,而不是CPU时间更有趣.>您正在测量客户端时间,而不是服务器时间.>服务器上有许多因素导致大块“坏”:缓冲区,撤消日志,复制延迟等.>解析时间是短块的主要开销(在服务器上).>您尚未指定行大小;这对客户端,网络和服务器有一些影响.>客户端和服务器之间有什么联系?插座? LAN? WAN?它们之间的延迟是多少?在WAN上,网络延迟可能会压倒所有其他考虑因素.>`key_buffer_size仅适用于MyISAM;我希望你没有使用那个引擎.>桌子上有没有索引?如果是这样,什么?例如,如果PRIMARY KEY是UUID,可能会产生巨大的影响.此外,UNIQUE键需要检查重复项. (同样,这是一个服务器任务.) 我的实验表明,在许多情况下,100-1000行的块接近最佳. (这恰好与你的发现有些一致,但这很巧合,因为我看了不同的时间.)

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧