【第31天】SQL进阶-写优化- 插入优化(SQL 小虚竹)

news2024/9/21 14:49:40

回城传送–》《31天SQL筑基》

文章目录

  • 零、前言
  • 一、练习题目
  • 二、SQL思路:SQL进阶-写优化-插入优化
    • 解法
      • 插入优化
        • 禁用索引
          • 语法如下
          • 适用数据库引擎
            • 非空表:禁用索引
        • 禁用唯一性检查
          • 语法如下
          • 适用数据库引擎
        • 禁用外键检查
          • 语法如下
          • 适用数据库引擎
        • 批量插入数据
          • 语法如下
          • 适用数据库引擎
        • 批量导入数据
          • 语法如下
          • 适用数据库引擎
        • 禁用事务自动提交
          • 语法如下
          • 适用数据库引擎
  • 三、总结
  • 四、参考

零、前言

今天是学习 SQL 打卡的第 31 天,每天我会提供一篇文章供群成员阅读( 不需要订阅付钱 )。

希望大家先自己思考,如果实在没有想法,再看下面的解题思路,自己再实现一遍。在小虚竹JAVA社区 中对应的 【打卡贴】打卡,今天的任务就算完成了,养成每天学习打卡的好习惯。

​ 虚竹哥会组织大家一起学习同一篇文章,所以有什么问题都可以在群里问,群里的小伙伴可以迅速地帮到你,一个人可以走得很快,一群人可以走得很远,有一起学习交流的战友,是多么幸运的事情。

​ 我的学习策略很简单,题海策略+ 费曼学习法。如果能把这些题都认认真真自己实现一遍,那意味着 SQL 已经筑基成功了。后面的进阶学习,可以继续跟着我,一起走向架构师之路。

今天的学习内容是:SQL进阶-写优化- 插入优化

一、练习题目

题目链接难度
SQL进阶-写优化- 插入优化★★★☆☆

二、SQL思路:SQL进阶-写优化-插入优化

在这里插入图片描述
在这里插入图片描述

解法

要求处理:

  • 从四个选项中选择一个正确答案

插入优化

往表中插入数据时,会受索引,唯一性校验,外键检查和事务自动提交等原因会影响插入的效率。以下会分别介绍各种优化的方式。

禁用索引

在(非空表)插入大量数据时,可以先禁用索引,等数据插入完成,再启用索引。达到提高插入性能。
注:对于非空表插入记录时,MySQL会根据表的索引对插入记录建立索引。空表插入禁用是没有效果的

语法如下
#禁用索引
ALTER TABLE 表名 DISABLE KEYS;
#开启索引
ALTER TABLE 表名 ENABLE KEYS;
适用数据库引擎

MyISAM

非空表:禁用索引

–先清空student表数据

truncate student_my_isam ;

调用存储过程,先创建1万条数据。


CALL add_student_disable_index(10000) ;

在这里插入图片描述

禁用索引

ALTER TABLE student_my_isam DISABLE KEYS;

再调用存储过程,创建数据。


CALL add_student_disable_index(10000) ;

在这里插入图片描述
启用索引

ALTER TABLE student_my_isam ENABLE KEYS;

禁用唯一性检查

在插入大量数据时,可以先禁用唯一性检查,等数据插入完成,再启用唯一性检查。达到提高插入性能。

语法如下
#禁用唯一性检查
SET UNIQUE_CHECKS = 0;
#开启唯一性检查
SET UNIQUE_CHECKS = 1;
适用数据库引擎

MyISAM和InnoDB

禁用外键检查

在插入大量数据时,可以先禁用外键检查,等数据插入完成,再启用外键检查。达到提高插入性能。

语法如下
#禁用外键检查
SET foreign_key_checks = 0;
#开启外键检查
SET foreign_key_checks = 1;
适用数据库引擎

MyISAM和InnoDB

批量插入数据

向数据表中插入多条数据时,一次性插入多条比每次插入一条的性能要高出很多。

语法如下
INSERT INTO table_name (column1,column2,column3,) 
VALUES (value1,value2,value3,),(value4,value5,value6,);
适用数据库引擎

MyISAM和InnoDB

批量导入数据

使用LOAD DATA INFILE导入数据比用INSERT插入数据的性能高。

语法如下
LOAD DATA INFILE ‘data_file_path’ INTO TABLE table_name;

说明:

  • data_file_path表示数据文件在服务器磁盘的绝对路径;
  • table_name表示数据表的名称

在使用LOAD DATA INFILE语句向InnoDB数据表批量导入数据时,被导入的文件中的数据记录最好是按照主键顺序排列的,这样可以提高导入数据的效率。

适用数据库引擎

MyISAM和InnoDB

禁用事务自动提交

InnoDB数据库引擎是支持事务的,可以先禁用事务自动提交,等数据插入完成,再启用事务自动提交。达到提高插入性能。

语法如下
#禁用事务自动提交
SET autocommit = 0;
#开启事务自动提交
SET autocommit = 1;
适用数据库引擎

InnoDB

三、总结

对于MylSAM引擎的表,常见的插入优化方法如下:

  • 禁用索引:对于非空表,插入记录时,MySQL会根据表的索引对插入的记录建立索引.如果插入大量数据,建立索引会降低插入记录的速度.为了解决这种情况可以在插入记录之前禁用索引,数据插入完毕后再开启索引。

对于空表批量导入数据,则不需要进行此操作,因为MylSAM引擎的表是在导入数据之后才建立索引的。

  • 禁用唯一性检查:插入数据时,MySQL会对插入的记录进行唯一性校验.这种唯一性校验也会降低插入记录的速度.为了降低这种情况对查询速度的影响,可以在插入记录之前禁用唯一性检查,等到记录插入完毕后再开启。
  • 批量插入数据:向数据表中插入多条数据时,一次性插入多条比每次插入一条的性能要高出很多。
  • 批量导入数据:使用LOAD DATA INFILE导入数据比用INSERT插入数据的性能高。

对于InnoDB引擎的表,常见的插入优化方法如下:

  • 禁用唯一性检查:插入数据时,MySQL会对插入的记录进行唯一性校验.这种唯一性校验也会降低插入记录的速度.为了降低这种情况对查询速度的影响,可以在插入记录之前禁用唯一性检查,等到记录插入完毕后再开启。
  • 禁用外键检查:插入数据之前执行禁止对外键的检查,数据插入完成之后再恢复对外键的检查。
  • 禁止事务自动提交:InnoDB数据库引擎是支持事务的,可以先禁用事务自动提交,等数据插入完成,再启用事务自动提交。达到提高插入性能。

所以,嗯,这题的答案选。。评论区大声告诉虚竹哥。

四、参考

MySQL进阶技能树–>写优化–>插入优化
SQL快速入门-了解MySQL存储引擎(SQL 小虚竹)

我是虚竹哥,我们明天见~

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

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

相关文章

W806(一)模拟IIC驱动0.96OLED[移植]

前言平头哥内核的国产开发板,资源丰富,按照官方的描述是能够吊打STM32F103C8T6的,22年刚发布的时候就买了,但是当时忙于考研,而且开发板的SDK不够完善,所以23年来填一下坑,今年我在官方群里找到…

ChatGPT原理与技术演进剖析

—— 要抓住一个风口,你得先了解这个风口的内核究竟是什么。本文作者:黄佳 (著有《零基础学机器学习》《数据分析咖哥十话》) ChatGPT相关文章已经铺天盖地,剖析(现阶段或者只能说揣测)其底层原…

为啥程序会有bug?

这是一篇半娱乐性的吐槽文章,权当给广大技术人员解解闷:)。哈哈哈,然后我要开始讲一个经常在发生的事实了。(程序员们可能会感到一些不适)99.999999999%做技术的都会被问到或者被吐槽到:“你的程…

PPT和回放来了 | 中国PostgreSQL数据库生态大会圆满落幕

2月17-19日,中国PostgreSQL数据库生态大会在北京中科院软件所和CSDN平台以线下线上结合方式盛大召开!本届大会由中国开源软件推进联盟PostgreSQL分会主办。作为自2017年后我们举办的第六届年度行业大会,延续了传播技术,发展产业生…

代码质量与安全 | 一文了解高级驾驶辅助系统(ADAS)及其开发中需要遵循的标准

高级驾驶辅助系统(ADAS)有助于提高车内每个人的安全性,帮助他们安全抵达目的地。这项技术功能非常重要,因为大多数的严重车祸都是人为错误造成的。 本篇文章将讨论什么是高级驾驶辅助系统(ADAS)&#xff0…

Linux基础-新手必备命令

概述系统工作系统状态检测文件与目录管理文件内容查阅与编辑打包压缩与搜索常见命令图解参考资料概述常见执行 Linux 命令的格式是这样的:命令名称 [命令参数] [命令对象]注意,命令名称、命令参数、命令对象之间请用空格键分隔。命令对象一般是指要处理的…

第三章 Kafka生产问题总结及性能优化实践

第三章 Kafka生产问题总结及性能优化实践 1、线上环境规划 JVM参数设置 kafka 是 scala 语言开发,运行在 JVM 上,需要对 JVM 参数合理设置,参看 JVM 调优专题 修改 bin/kafka-start-server.sh 中的 JVM 设置,假设机器是 32G 内…

Java有几种文件拷贝方式?哪一种最高效?

第12讲 | Java有几种文件拷贝方式?哪一种最高效? 我在专栏上一讲提到,NIO 不止是多路复用,NIO 2 也不只是异步 IO,今天我们来看看 Java IO 体系中,其他不可忽略的部分。 今天我要问你的问题是,…

一个巨型的ESP8266模块,围观围观

作者:晓宇,排版:晓宇微信公众号:芯片之家(ID:chiphome-dy)01 巨型ESP8266ESP8266几乎无人不知,无人不晓了吧,相当一部分朋友接触物联网都是从ESP8266开始的,…

软考中级-嵌入式系统设计师(二)

1、逻辑电路:组合逻辑单路、时序逻辑电路。根据电路是否有存储功能判断。 2、组合逻辑电路 指该电路在任一时刻的输出,仅取决于该时刻的输入信号,而与输入信号作用前电路的状态无关。一般由门电路组成,不含记忆元器件&#xff0…

XD文件转换为sketch的三种方法

XD文件如何转化为Sketch文件,作为竞品的两个产品,如果要互通到可以彼此转换为彼此的文件格式,还是有点难的。所以,今天我总结了 3 个方法,其中最后一个方法是最好用的! XD 和 Sketch 算是竞品,想…

论文笔记:TIMESNET: TEMPORAL 2D-VARIATION MODELINGFOR GENERAL TIME SERIES ANALYSIS

ICLR 2023 1 intro 时间序列一般是连续记录的,每个时刻只会记录一些标量 之前的很多工作着眼于时间维度的变化,以捕捉时间依赖关系 ——>可以反映出、提取出时间序列的很多内在特征,比如连续性、趋势、周期性等但是现实时间序列数据中的…

linux环境搭建私有gitlab仓库以及启动gitlab后出现卡顿处理办法

搭建之前,需要安装相应的依赖包,并且要启动sshd服务(1).安装policycoreutils-python openssh-server openssh-clients [rootVM-0-2-centos ~]# sudo yum install -y curl policycoreutils-python openssh-server openssh-clients [rootVM-0-2-centos ~]…

C++【类与对象】

文章目录类与对象(1)类与对象一1.0.面向过程和面向对象初步认识1.1.类的引入1.2.类的定义1.3.类的访问限定符及封装1.4.类的作用域1.5.类的实例化1.6.类的对象大小的计算1.8.类成员函数的this指针(2)类与对象二2.0类的6个默认成员…

LeetCode——51. N 皇后

一、题目 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案…

CS144-Lab4

概述 在实验0中,你实现了流量控制的字节流(ByteStream)的抽象概念。 在实验1、2和3中,你实现了该抽象概念与互联网提供的抽象概念之间的转换工具:不可靠的数据报(IP或UDP)。 现在,你已经接近顶峰:一个可以工作的TCP…

Word处理控件Aspose.Words功能演示:使用 C++ 在 Word 文档中查找和替换文本

Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word Aspose API支持流行文件格式处理,并允…

如何使用MidJourney和ChatGPT制作动画短片?

Ammaar Reshi当我制作这部使用生成式人工智能制作的蝙蝠侠动画短片时——我不知道它会在不到一周的时间内获得 700 万次观看。想学!给我们讲解下是整体的制作流程吧!!opusAmmaar Reshi我不是电影制作人,也从未写过剧本。我只是有还…

高频面试题|JVM虚拟机的体系结构是什么样的?

一. 前言最近有很多小伙伴都在找工作,他们在面试时经常被面试官问到一个问题:请说说JVM虚拟机的体系结构是什么样的?很多小伙伴都能说出堆、栈等相关内容,但面试官紧接着又问,你还知道其他内容吗?这时不少小伙伴就语塞…

STM32模拟SPI协议获取24位模数转换(24bit ADC)芯片AD7791电压采样数据

STM32模拟SPI协议获取24位模数转换(24bit ADC)芯片AD7791电压采样数据 STM32大部分芯片只有12位的ADC采样性能,如果要实现更高精度的模数转换如24位ADC采样,则需要连接外部ADC实现。AD7791是亚德诺(ADI)半导体一款用于低功耗、24…