SQL优化--插入数据

news2024/10/6 10:40:08

插入数据(insert优化)

如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优化。

insert into tb_test values(1,'tom');
insert into tb_test values(2,'cat');
insert into tb_test values(3,'jerry');

优化方案一:批量插入数据

Insert into tb_test values(1,'Tom'),(2,'Cat'),(3,'Jerry');

即便是批量插入也不建议一次性插入太多,500-1000条较为合适。如果需要插入更多,建议分割成多次进行插入

为什么批量插入不建议太多

对于批量插入数据,确实不建议一次性插入太多记录,通常建议控制在500到1000条左右的范围内。这是因为一次性插入大量数据可能会导致以下问题:

1. 事务大小:插入太多记录可能导致事务变得非常大,这会增加数据库的资源消耗和锁定时间,从而影响其他事务的性能。

2. 内存消耗:大批量插入可能需要大量的内存来处理,这可能导致数据库服务器的内存不足,从而导致性能下降或崩溃。

3. 日志写入:每次插入操作都会写入事务日志,大批量插入会导致大量的日志写入,增加了磁盘IO负担。

4. 锁定和竞争:大批量插入可能会导致与其他操作的锁定竞争,影响并发性能。

为了避免这些问题,通常建议将批量插入分批进行,每次插入500到1000条记录,然后在每个批次之间进行提交。这样可以控制事务的大小,减少内存消耗,降低日志写入量,并减少锁定竞争,从而提高性能和稳定性。

此外,如果可能的话,可以考虑使用数据库特定的批量插入工具或语法,以进一步优化性能。例如,在MySQL中,可以使用`INSERT INTO ... VALUES (), (), ...`语法来一次性插入多行数据,而不是多个单独的INSERT语句。不同数据库管理系统可能具有不同的优化策略,因此要根据具体的数据库系统来选择合适的方法。

优化方案二:手动提交数据

在MySQL当中,默认是自动提交的,也就是意味着你每执行完一条insert语句便会自动提交。这样会涉及到频繁的事务的开启和提交,所以我们可以手动控制事务

insert into tb_test values(1,'tom');
insert into tb_test values(2,'cat');
insert into tb_test values(3,'jerry');

优化方案三:主键顺序插入

主键顺序插入,性能要高于乱序插入。

这种方法可以帮助确保主键值按照顺序分配,从而提高性能并减少竞争

主键乱序插入 : 8 1 9 21 88 2 4 15 89 5 7 3
主键顺序插入 : 1 2 3 4 5 7 8 9 15 21 88 89

大批量数据插入

如果一次性需要插入大批量数据(比如: 几百万的记录),使用insert语句插入性能较低,此时可以使 用MySQL数据库提供的load指令进行插入。

通过load指令,我们可以一次性将本地文件当中的数据,全部加载到数据库当中

操作如下:

左侧是我们本地磁盘文件的原始结构,我们可以通过一条load指令加载到数据库中。

我们发现,左侧磁盘文件的每一个字段是以逗号分隔的,也就是说使用load指令加载的时候,本地文件中写的并不是sql语句,而是符合一定规则的文件,分割字段的也不一定是逗号,也可以是分号等各种符号

操作

表示当连接到服务器时,需要去加载本地文件

-- 客户端连接服务端时,加上参数 -–local-infile
mysql –-local-infile -u root -p

-- 设置全局参数local_infile为1,开启从本地加载文件导入数据的开关
set global local_infile = 1;

-- 执行load指令将准备好的数据,加载到表结构中
load data local infile '/root/sql1.log' into table tb_user 
fields terminated by ',' lines terminated by '\n' ;

在load时,主键顺序插入性能高于乱序插入

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

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

相关文章

OJ练习第170题——最大间距(桶算法)

最大间距 力扣链接:164. 最大间距 题目描述 给定一个无序的数组 nums,返回 数组在排序之后,相邻元素之间最大的差值 。如果数组元素个数小于 2,则返回 0 。 您必须编写一个在「线性时间」内运行并使用「线性额外空间」的算法…

软件结构化设计-架构真题(二十七)

(2019年)进程P有8个页面,页号分别为0~7,状态位等于1和0分别表示在内存和不在内部才能。假设系统给P分配4个存储块,如果进程P要访问页面6不在内存,那么应该淘汰号是多少? 答案:页号2 …

docker 方式安装mysql 主从方式keepalived实现高可用

一、环境介绍 二、MySQL安装 在两台服务器上都安装mysql 1、拉取镜像 docker pull mysql:8.0.272、创建挂载目录 mkdir -p /data/mysql/3、运行容器 主节点 docker run \--restartalways \--name master_mysql -p 3306:3306 \-e MYSQL_ROOT_PASSWORD123456 -d \-v /data/m…

glTF和GLB有什么区别?

推荐:使用 NSDT场景编辑器快速搭建3D应用场景 自1960年代末开始以来,3D扫描突飞猛进,彻底改变了我们创建真实世界物体和环境的数字模型的方式。虽然很容易考虑它在建筑、工程和游戏等领域的使用,但实际应用要广泛得多。2023年&…

Fiddler实现android手机抓包

目录 一、fiddler的简介二、安装fiddler三、fiddler设置1.设置HTTPS2.设置允许远程连接3. 重启fillder,使得配置生效4. 查看端口监听 四、android端设置1、首先查看电脑的 IP 地址,确保手机和电脑在同一个局域网内2、设置代理 五、抓包测试 原文链接 一、…

Verilog零基础入门(边看边练与测试仿真)-时序逻辑-笔记(4-6讲)

文章目录 第四讲第五讲第六讲 第四讲 1、计数器 代码: //计数器 timescale 1ns/10ps module counter(clk,res,y); input clk; input res; output[7:0] y;reg[7:0] y; wire[7:0] sum;//1运算的结果(1&#xff0…

平安大视野解读宏观经济:看好中国经济长期潜力,资产配置价值凸显

“资产配置多元化是投资中唯一的免费午餐。” 1990年,哈里马科维茨因为他提出的“资产组合选择理论”获得了诺贝尔经济学奖。 如何看待当前国内外宏观经济,如何通过资产配置提升家庭财富健康度?9月4日,平安银行联合《21世纪经济报…

Revit SDK 介绍:CurtainWallGrid 幕墙网格

前言 这个例子介绍如何创建幕墙,以及如何通过 API 编辑幕墙。 内容 运行效果: 创建幕墙 幕墙在 Revit 体系里面属于墙的一种,因此,它对应的 API 类型仍然为 Wall,只是类型有差异。 // WallGeometry::CreateCurt…

机器学习笔记 - 从数学表示的角度看待监督学习

一、概述 监督学习的目标是根据数据进行预测。比如电子邮件垃圾邮件过滤,需要将电子邮件(数据实例)分类为垃圾邮件或非垃圾邮件。 按照传统计算机科学的方法,需要编写一个精心设计的程序,遵循一些规则来确定电子邮件是否是垃圾邮件。尽管这样的程序可能在一段时间内运行得…

Apache解析漏洞实验

实验目的 了解Apache解析漏洞原理掌握Apache漏洞的利用方法 实验工具 火狐:Mozilla Firefox,中文俗称“火狐”(正式缩写为Fx或fx,非正式缩写为FF),是一个自由及开放源代码网页浏览器,使用Gec…

RPC项目解析(1)

分布式通信框架:让远程方法调用和调用进程内方法一样简单 RPC通信原理 rpc:远程过程调用(远程能够调用其他模块的方法) 在rpc中需要发送时候,对发送的信息进行序列化,在服务端对接收到的信息进行反序列化…

【C++11新特性】function包装器

文章目录 1. function包装器1.1 function包装器介绍1.2 function包装器对类型的统一1.3 function包装器的意义 1. function包装器 1.1 function包装器介绍 function包装器是一种函数包装器,也叫做适配器。它可以对可调用对象进行包装,C中的function本质…

C++【C++学习笔记_Wang】

时间进度C是什么?多态什么是多态?生活中的多态C中的多态 赋值兼容赋值兼容规则实现安全转换 时间进度 Day101 ok Day804 ok Day805 ok C是什么? C大部分包含C语言。 C完全兼容C语言。 C在C语言的基础上添加:封装、继承、多态…

【SpringMVC】JSR 303与interceptor拦截器快速入门

目录 一、JSR303 1、什么是JSR 303? 2、为什么要使用JSR 303? 3、JSR 303常用注解 3.1、常用的JSR 303注解 3.2、Validated与Valid区别 3.2.1、Validated 3.2.2、Valid 3.2.3、区别 4、使用案例 4.1、导入依赖 4.2、配置校验规则 4.3、编写…

vue基础知识九:动态给vue的data添加一个新的属性时会发生什么?怎样解决?

一、直接添加属性的问题 我们从一个例子开始 定义一个p标签&#xff0c;通过v-for指令进行遍历 然后给botton标签绑定点击事件&#xff0c;我们预期点击按钮时&#xff0c;数据新增一个属性&#xff0c;界面也 新增一行 <p v-for"(value,key) in item" :key&q…

QQ 逻辑漏洞可执行文件 漏洞复现

本文由掌控安全学院- wax 投稿 首先拿到QQ的版本&#xff0c;目前可测试版本包括QQ最新版本&#xff0c;TIM最新版本 新创建一个bat文件&#xff08;这个可以随意&#xff0c;上马的也可以&#xff0c;exe也可以&#xff09; &#xff0c;本次测试内容如下首先向你的手机端发一…

一文告诉你什么是 TCP 数据粘包,该如何解决!

粘包问题概述 描述背景 采用TCP协议进行网络数据传送的软件设计中&#xff0c;普遍存在粘包问题。这主要是由于现代操作系统的网络传输机制所产生的。 我们知道&#xff0c;网络通信采用的套接字(socket)技术&#xff0c;其实现实际是由系统内核提供一片连续缓存&#xff08…

如何实现高效客户服务自助?

随着科技的不断发展&#xff0c;越来越多的企业开始意识到提供良好的客户服务对于企业的重要性。而在满足客户需求的同时&#xff0c;高效实现客户服务自助也成为了许多企业关注的焦点。客户服务自助可以帮助企业降低成本、提高效率&#xff0c;同时也能给客户带来更好的体验。…

[每周一更]-(第60期):15种MySQL索引失效场景

背景 工作中都会踩到Mysql数据库不走索引的坑。常见的现象就是&#xff1a;明明在字段上添加了索引&#xff0c;但却并未生效。 另外&#xff0c;无论是面试或是日常&#xff0c;Mysql索引失效的通常情况都应该了解和学习。 为了方便学习和记忆&#xff0c;这篇文件将常见的15种…

人大女王金融硕士项目——当你觉得迷茫的时候,就去学习来充实自己

不要总以为自己的努力会付之东流&#xff0c;不要因为现在的生活或工作还是依旧没有起色&#xff0c;而想太多。继续努力就好&#xff0c;哪怕明天没有惊喜&#xff0c;但最终的你&#xff0c;却在慢慢的变好。对于从业多年的在职人员来说&#xff0c;职业瓶颈期是非常普遍的。…