怎么cms做网站,甘肃网站建设公司电话,成都网站建设优化推广,西宁建设厅人事局网站参考:10万条数据批量插入#xff0c;到底怎么做才快#xff1f; - 知乎 (zhihu.com)
首先一般有两种方式#xff1a;1.使用jdbc批处理模式
2.使用insert into values方式
第一种方式#xff1a;他的优势是jdbc会帮我们进行预编译#xff0c;然后把预编译结果缓存起来到底怎么做才快 - 知乎 (zhihu.com)
首先一般有两种方式1.使用jdbc批处理模式
2.使用insert into values方式
第一种方式他的优势是jdbc会帮我们进行预编译然后把预编译结果缓存起来我对这个预编译的理解是一条sql到了mysql的sever层需要进行词法分析语法分析构建语法树然后检查字段是否有错把*替换成所有列这些操作他是用循环的形式进行插入的缺点就是如果mysql服务器和应用服务器不是同一台的话需要多次网络IO这里可能会影响性能。一般情况下第一种方式会比第二种方式快其核心其实也是批量插入但是源码里是1000一个分片
第二种方式一条 SQL 插入。优势在于只有一次网络 IO即使分片处理也只是数次网络 IO所以这种方案不会在网络 IO 上花费太多时间。劣势一是 SQL 太长了甚至可能需要分片后批量处理二是无法充分发挥 PreparedStatement 预编译的优势SQL 要重新解析且无法复用三是最终生成的 SQL 太长了数据库管理器解析这么长的 SQL 也需要时间。在浪潮里是通过这个方式实现的merge into加for each方式写在xml里一条sql执行完插入减少网络IO 当然还有其他优化手段辅助1.先把索引删除等插入完再把索引添加上 2.对插入顺序要求尽量按从小到大的顺序插入减小对B树形状改变如果从小到大的顺序只会在右下角插入如果插入大小随机有可能在中间插入会改变树的形状