Chao's Blog Chao's Blog
首页
  • vue

    • vue路由
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • java
  • spring
  • springboot
  • springcloud
  • git
  • maven
  • nginx
  • tomcat
  • springmvc
  • jvm
  • 图数据库
  • mysql数据库
  • redis数据库
  • windows下docker安装nginx并挂载目录
  • linux命令
  • linux安装软件
  • linux脚本
  • idea
  • vscode
  • 归档
  • 综合项目

    • 若依项目
    • mall项目
  • java
  • mybatis
  • xxl-job
  • mybatis
GitHub (opens new window)

~chao

永远菜鸟,不断努力~
首页
  • vue

    • vue路由
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • java
  • spring
  • springboot
  • springcloud
  • git
  • maven
  • nginx
  • tomcat
  • springmvc
  • jvm
  • 图数据库
  • mysql数据库
  • redis数据库
  • windows下docker安装nginx并挂载目录
  • linux命令
  • linux安装软件
  • linux脚本
  • idea
  • vscode
  • 归档
  • 综合项目

    • 若依项目
    • mall项目
  • java
  • mybatis
  • xxl-job
  • mybatis
GitHub (opens new window)
  • cypher图数据

  • mysql数据库

    • mysql尚硅谷宋红康

    • 总结

    • mysql数据库备份与恢复

    • mysql日志

    • mysql性能优化

      • MySQL性能优化是什么,如何定位效率低下的SQL?
      • MySQL如何分析查询语句?
      • 索引到底对查询速度有什么影响?
      • MySQL优化数据库结构的3种方法
      • MySQL小技巧:提高插入数据的速度
        • MySQL优化服务器,提高MySQL的运行速度!
    • redis数据库

    • oracle数据库

    • 数据库
    • mysql数据库
    • mysql性能优化
    ~chao
    2023-01-29
    目录

    MySQL小技巧:提高插入数据的速度

    # MySQL小技巧:提高插入数据的速度

    在 MySQL 中,向数据表插入数据时,索引、唯一性检查、数据大小是影响插入速度的主要因素。本节将介绍优化插入数据速度的几种方法。

    根据不同情况,可以分别进行优化。

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

    # 1. 禁用索引

    对非空表插入数据时,MySQL 会根据表的索引对插入的记录进行排序。插入大量数据时,这些排序会降低插入数据的速度。为了解决这种情况,可以在插入数据之前先禁用索引,等到数据都插入完毕后在开启索引。

    禁用索引的语句为:

    ALTER TABLE table_name DISABLE KEYS;

    重新开启索引的语句为:

    ALTER TABLE table_name ENABLE KEYS;

    对于新创建的表,可以先不创建索引,等到数据都导入以后再创建索引,这样可以提高导入数据的速度。

    # 2. 禁用唯一性检查

    插入数据时,MySQL 会对插入的数据进行唯一性检查。这种唯一性检验会降低插入数据的速度。为了降低这种情况对查询速度的影响,可以在插入数据前禁用唯一性检查,等到插入数据完毕后在开启。

    禁用唯一性检查的语句为:

    SET UNIQUE_CHECKS=0;

    开启唯一性检查的语句为:

    SET UNIQUE_CHECKS=1;

    # 3. 使用批量插入

    在 MySQL 中,插入多条数据有 2 种方式。第一种是使用一个 INSERT 语句插入多条数据。INSERT 语句的情形如下:

    INSERT INTO items(name,city,price,number,picture) VALUES ('耐克运动鞋','广州',500,1000,'001.jpg'),('耐克运动鞋2','广州2',500,1000,'002.jpg');

    第二种是一个 INSERT 语句只插入一条数据,执行多个 INSERT 语句来插入多条数据。INSERT 语句的情形如下:

    INSERT INTO items(name,city,price,number,picture) VALUES('耐克运动鞋','广州',500,1000,'001.jpg'); INSERT INTO items(name,city,price,number,picture) VALUES('耐克运动鞋2','广州',500,1000,'002.jpg');

    一次性插入多条数据和多次插入数据所耗费的时间是不一样的。第一种方式减少了与数据库之间的连接等操作,其速度比第二种方式要快一些。所以插入大量数据时,建议使用第一种方法。

    注意:如果能用 LOAD DATA INFILE 语句,就尽量用 LOAD DATA INFILE 语句。因为 LOAD DATA INFILE 语句导入数据的速度比 INSERT 语句的速度快。

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

    # 1. 禁用唯一性检查

    同 MyISAM 引擎相同,插入数据之前先禁用索引,等到数据都插入完毕后在开启索引。

    # 2. 禁用外键检查

    使用外键时,在子表中插入一条数据,首先会检查主表中是否有相应的主键值,然后锁定主表的记录,在插入值。相比较,使用外键多了2步操作,速度会慢一些。

    所以我们可以在插入数据之前禁止对外键的检查,数据插入完成之后再恢复对外键的检查。不多对于数据完整性要求较高的系统不建议使用。

    禁用外键检查语句为:

    SET FOREIGN_KEY_CHECKS=0;

    恢复对外键的检查语句为:

    SET FOREIGN_KEY_CHECKS=1;

    # 3. 禁止自动提交

    在《MySQL设置事务自动提交 (opens new window)》一节我们提到 MySQL 的事务自动提交模式默认是开启的,其对 MySQL 的性能也有一定得影响。也就是说如果你插入了 1000 条数据,MySQL 就会提交 1000 次,这大大影响了插入数据的速度。而如果我们把自动提交关掉,通过程序来控制,只要一次提交就可以了。

    所以插入数据之前可以先禁止事务的自动提交,待数据导入完成之后,再恢复自动提交操作。

    禁止自动提交语句为:

    SET AUTOCOMMIT=0;

    恢复自动提交语句为:

    SET AUTOCOMMIT=1;

    编辑 (opens new window)
    上次更新: 2024/01/26, 05:03:22
    MySQL优化数据库结构的3种方法
    MySQL优化服务器,提高MySQL的运行速度!

    ← MySQL优化数据库结构的3种方法 MySQL优化服务器,提高MySQL的运行速度!→

    最近更新
    01
    python使用生成器读取大文件-500g
    09-24
    02
    Windows环境下 Docker Desktop 安装 Nginx
    04-10
    03
    使用nginx部署多个前端项目(三种方式)
    04-10
    更多文章>
    Theme by Vdoing | Copyright © 2022-2024 chaos | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式