当前位置:   article > 正文

44 mysql batch insert 的实现

44 mysql batch insert 的实现

前言

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

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

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

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

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

 

测试数据表如下 

  1. CREATE TABLE `tz_test_02` (
  2. `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  3. `field1` varchar(128) DEFAULT NULL,
  4. `field2` varchar(128) DEFAULT NULL,
  5. PRIMARY KEY (`id`) USING BTREE,
  6. UNIQUE KEY `field_1_2` (`field1`) USING BTREE
  7. ) 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

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/784768
推荐阅读
相关标签
  

闽ICP备14008679号