43 mysql insert select 的实现

前言

我们这里 来探讨一下 insert into $fields select $fields from $table;

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

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

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

 

测试数据表如下 

CREATE TABLE `tz_test` (`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=utf8CREATE 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

 

tz_test 的数据如下 

2e503e95cf51445eb7350553d7bd85b5.png

 

 

insert into select 的实现

执行 sql 如下 “insert into tz_test_02 select * from tz_test;”

 

源表数据行的迭代

这里的 sub_select 是查询以及迭代 源表, 然后 之后传递到 下游的 Query_result_insert 进行处理一行的数据 

cd227a5071094f8388a1628abb152233.png

 

整个流程大致如下, 显示 将源行的数据拷贝到目标行, 然后 在持久化到目标表

bbde27e102fc417f9d8622d83beb3180.png 

 

源表到目标表 数据行的拷贝

数据的拷贝, 将数据从 源表的源字段列表 拷贝到 目标表的目标字段列表

4d6e16d2d08d48779428eae0799a37af.png

dc53d567108f4d8a90a87ecd518000c2.png 

e34f60b0850f4865a4ae4164850d1193.png 

 

目标表 数据行的持久化

然后向目标表中插入记录的实现在这里  

f713f6d02df9470ab12e72610beaa71f.png

 

然后 之所以效率高, 是因为 他只需要 mysql 内部迭代

没有和外部程序交互的开销, 因此 它的效率 “较高”

 

 

 完

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/35437.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字社交的领航者:解析Facebook的引领作用

在当今数字化社会中,社交网络已经成为了人们日常生活不可或缺的一部分。而在众多社交平台中,Facebook凭借其巨大的用户基础和创新的技术应用,被公认为数字社交领域的领航者之一。本文将深入解析Facebook在数字社交中的引领作用,探…

一起学Hugging Face Transformers(3) - Hugging Face 加载模型和Tokenizer

文章目录 前言一、加载预训练模型和Tokenizer1. 安装Transformers库2. 加载预训练模型和Tokenizer 二、使用AutoModel和AutoTokenizer1. 使用AutoModel和AutoTokenizer2. 原理1) 配置文件 (config.json)2) 使用AutoModel3) 使用AutoTokenizer…

Vue.js 的 provide 选项来向子组件提供数据

父组件 // Parent.vue <template><div><p>Parent Component</p><p>Count: {{ count }}</p><ChildComponent /></div> </template><script> import ChildComponent from ./ChildComponent.vue;export default {co…

这三款工具很好用,赶快试试

FileZilla FileZilla是一款免费开源的FTP软件&#xff0c;分为客户端版本和服务器版本&#xff0c;具备所有的FTP软件功能。它是一个快速、可信赖的FTP客户端以及服务器端开放源代码程序&#xff0c;具有多种特色和直觉的界面。FileZilla客户端版是一个方便高效的FTP客户端工具…

第一后裔The First Descendant开服时间、配置要求一览

第一后裔是一款采用虚幻5引擎打造的第三人称合作射击动作RPG&#xff0c;玩家将化身为一名继承者&#xff0c;通过各种任务和故事不断成长&#xff0c;为守护人类与对抗侵略者战斗。该作即将上线&#xff0c;为了不让玩家们错过这款精彩的游戏&#xff0c;本文整理了第一后裔上…

卫生间和厨房墙面基层起沙怎么办?

最近有几个工地遇到了一个共同问题&#xff0c;卫生间和厨房墙面起沙。      如果有正在装修的业主&#xff0c;可以看一下你家墙面是否也存在这样的问题。      最简单的检测方法&#xff0c;在工地上找一个坚硬的东西在墙上划&#xff0c;如果墙上的沙粒子一直哗哗的…

测评:【AI办公】版本更迭与AI加持下的最新ONLYOFFICE桌面编辑器8.1

你是否还在为没有一款合适的在线桌面编辑器而苦恼&#xff1f;你是否还在因为办公软件的选择过少而只能使用WPS或者office&#xff1f;随着办公需求的不断变化和发展&#xff0c;办公软件也在不断更新和改进。ONLYOFFICE 作为一款全功能办公软件&#xff0c;一直致力于为用户提…

2024年全国青少年信息素养大赛图形化编程复赛样题_6547网

第 1 题 问答题 【编程实现】 按空格键随机切换背景&#xff0c;让背景对应的角色造型显示在舞台上。 【具体要求】 对角色编程&#xff0c;当按下空格键时&#xff0c;背景随机切换&#xff1b; 角色切换成对应的造型显示在舞台上&#xff1b; 角色说“我是”和它的造…

帮助你简易起步一个BLOG(博客搭建)项目

Blog项目 后端项目结构1. 项目初始化2. 详细步骤3.postman测试 前端1. 项目初始化2. 详细步骤 本章节是为了帮助你起步一个完整的前后端分离项目。 前端技术栈&#xff1a; react、vite、mantine、tailwind CSS、zustand、rxjs、threejs 后端技术栈&#xff1a;nodemon、nodej…

计算机网络 5.2网卡

第二节 网卡 一、认识网卡 1.工作方式&#xff1a;中断请求。 2.应用场合&#xff1a;接入局域网。 3.功能&#xff1a; ①实现局域网中传输介质的物理连接和电气连接。 ②拥有一个全球唯一的网卡地址&#xff08;长度为48位的二进制数&#xff09;。 ③执行网络控制命令…

深入探索Batch脚本:实现延迟执行的高级技巧

在Windows操作系统中&#xff0c;批处理文件&#xff08;Batch文件&#xff09;是一种自动化脚本&#xff0c;允许用户执行一系列命令和操作。在某些情况下&#xff0c;我们可能需要在批处理文件中创建延迟执行的命令&#xff0c;即让某些操作在预定的时间后执行。本文将详细介…

C语言 什么是算术运算?什么是关系运算?什么是逻辑运算?如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?

算术运算&#xff1a;指的是基本的数学运算&#xff0c;包括加法&#xff08;&#xff09;、减法&#xff08;-&#xff09;、乘法&#xff08;*&#xff09;、除法&#xff08;/&#xff09;、取模&#xff08;%&#xff09;。 关系运算&#xff1a;用于比较两个值之间的大小…

Transformer教程之神经网络和深度学习基础

在当今的人工智能领域&#xff0c;Transformer已经成为了一个热门的词汇。它不仅在自然语言处理&#xff08;NLP&#xff09;领域取得了巨大的成功&#xff0c;还在计算机视觉等其他领域展现出了强大的潜力。然而&#xff0c;要真正理解Transformer&#xff0c;我们首先需要扎实…

gdb用法

创建文件 // main.cpp文件 // 稳态误差 void pid_test_wentaiwucha() {float p 1.5;int t 1; // t 1s;int target 5; // 5m/sfloat output 0;float radis 3; // 稳态误差std::cout << "output: " << std::endl;fo…

析构函数:C++中的清洁工

目录 前言 什么是析构函数&#xff1f; 析构函数的特点&#xff1a; 何时需要显式定义析构函数&#xff1f; 显式定义析构函数的必要性 编写析构函数的注意事项 结论 前言 在C编程中&#xff0c;析构函数是一个重要的概念&#xff0c;它负责在对象生命周期结束时释放资…

并发 多线程

目录 thread thread 类总览 构造函数 join joinable ​编辑 detach swap yield swap 成员函数的调用 namespace::this_thread 线程同步--锁 互斥锁mutex 递归锁recursive_mutex 定时锁 Lock 锁辅助类 lock_guard​编辑 unique_lock std::lock 解决死锁问题 消息…

浅谈逻辑控制器之随机顺序控制器

浅谈逻辑控制器之随机顺序控制器 随机顺序控制器&#xff08;Random Order Controller&#xff09;作为一个独特的逻辑控制器&#xff0c;为测试脚本的执行增添了一层随机性&#xff0c;特别适用于模拟用户行为中不确定的访问模式。 随机顺序控制器概述 随机顺序控制器&…

代码随想录算法训练营第三十六天|62.不同路径、 63. 不同路径 II、343.整数拆分(可跳过)、96.不同的二叉搜索树(可跳过)

62.不同路径 题目链接&#xff1a;62.不同路径 文档讲解&#xff1a;代码随想录 状态&#xff1a;还行 思路&#xff1a;当前状态的只有可能是从上面或者左边过来的&#xff0c;所以 dp[i][j] dp[i-1] dp[j-1] 题解&#xff1a; public int uniquePaths(int m, int n) {if (…

Docker 安装Nginx部署网站 防火墙端口 数据卷挂载

拉取镜像 docker pull nginx#不写版本号 表示最新版本查看是否拉取成功 docker images#成功 nginx latest 605c77e624dd 2 years ago 141MB mysql 8.0 3218b38490ce 2 years ago 516MB mysql latest 3218b38490ce 2 years ago 5…

rk3568 OpenHarmony4.0 如何去除锁屏

问题描述&#xff1a; OpenHarmony4.0开机或者息屏按电源键进入时需要上滑解锁屏幕&#xff0c;其实没有什么大的作用。 上滑解锁 那么如何去调这个锁屏效果呢&#xff0c;本给出一个方法。 以rk3568开发板OpenHarmony4.0为例&#xff0c;分三步&#xff1a; 1、删除源码中Sys…