当前位置: 首页 > news >正文

44 mysql batch insert 的实现

前言

我们这里 来探讨一下 insert into $fields values ($values1), ($values2), ($values3);

的相关实现, 然后 大致来看一下 为什么 他能这么快

按照 我的思考, 应该里里面有 批量插入才对, 但是 调试结果 发现令我有一些意外

呵呵 果然 只有调试才是唯一的真理

相比于 单条单条的数据交互, 节省的是多次服务交互的开销, 服务插入的一些细节开销 

 

测试数据表如下 

CREATE TABLE `tz_test_02` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`field1` varchar(128) DEFAULT NULL,`field2` varchar(128) DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE,UNIQUE KEY `field_1_2` (`field1`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8

 

 

批量数据插入的实现

执行 sql 如下 “insert into tz_test_02 (`field1`, `field2`) values ("你好0", "没意思0"), ("你好1", "没意思1"), ("你好2", "没意思2"), ("你好3", "没意思3"), ("你好4", "没意思4"), ("你好5", "没意思5"), ("你好6", "没意思6"), ("你好7", "没意思7"), ("你好8", "没意思8"), ("你好9", "没意思9");”

 

整体的批量插入流程如下 

its 迭代的是带插入的记录列表, 合计 10 条, 然后 循环插入

这里 fill_record_n_invoke_before_triggers 的处理是将每一条记录的内容复制到对应的 数据字段上面

write_record 是将当前数据行 持久化到数据库

4f8d41da35224c2ba4c2cbae0ee72e94.png

 

 

数据拷贝到目标数据行

tz_test_02 的数据列表拷贝如下 

8bbacb112fc54e9d93e7ac5c065caade.png

2bcfc073329245ccb9091ee3ebc6934d.png 

 

持久化记录到目标表

插入记录情况如下

8510d8263e1841ee9ac4879b669c14b4.png

 

53b5f469b0f9411a9fe8f3539e510ec7.png 

 

待插入记录 按照字节拆解如下

f5b5e8b599494c73ae8fc9d361734326.png

 

 

 

 

 

相关文章:

  • JavaScript懒加载图像
  • Vue移动端地图App:van-uploader导致的卡顿问题
  • 企业级-生成PDF移除异常空白页
  • pycharm配置conda解释器
  • 【SSL 1056】最大子矩阵 (多维DP)
  • 统计信号处理基础 习题解答11-8
  • C语言中宏定义控制日志输出及log库介绍
  • 在大型项目中,怎样有效地组织和管理 SCSS 文件结构以提高开发效率?
  • 米国政府呼吁抛弃 C 和 C++
  • 基于Lua源码开发动态库供lua脚本使用
  • 红黑树插入删除流程(流程图)
  • 记一次小程序渗透
  • 1982Springboot宠物美容院管理系统idea开发mysql数据库web结构java编程计算机网页源码maven项目
  • 网络安全筑基篇——反序列化漏洞
  • 二分查找及其变种
  • JS 中的深拷贝与浅拷贝
  • 2019年如何成为全栈工程师?
  • Apache Zeppelin在Apache Trafodion上的可视化
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Git学习与使用心得(1)—— 初始化
  • Go 语言编译器的 //go: 详解
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JS笔记四:作用域、变量(函数)提升
  • mockjs让前端开发独立于后端
  • nodejs实现webservice问题总结
  • React Native移动开发实战-3-实现页面间的数据传递
  • 大数据与云计算学习:数据分析(二)
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 跨域
  • 码农张的Bug人生 - 初来乍到
  • 每天10道Java面试题,跟我走,offer有!
  • 前端相关框架总和
  • 探索 JS 中的模块化
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 新版博客前端前瞻
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • # 数据结构
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (二)fiber的基本认识
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (一)Neo4j下载安装以及初次使用
  • (转)Google的Objective-C编码规范
  • (转)Linq学习笔记
  • (转)linux 命令大全
  • (转载)Google Chrome调试JS
  • .aanva