Mysql中几种插入效率的实例对比

针对 Mysql 中几种插入方式的效率对比,包括单条插入、多条插入和批量插入,我会给出详细的攻略。

1. 背景

在实际开发中,我们可能需要向数据库中批量插入大量数据,此时插入方式的效率就会成为一个非常关键的问题。因此,对于 Mysql 中不同的插入方式,我们需要了解它们之间的效率对比,以便在实际开发中选择合适的方式。

2. 插入方式

2.1 单条插入

单条插入是最基本的插入方式,使用 INSERT INTO 语句将一条数据插入到表中。示例代码如下:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

2.2 多条插入

多条插入是在单条插入的基础上进行优化,使用 INSERT INTO 语句一次性插入多条数据。示例代码如下:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...),
       (value1, value2, value3, ...),
       (value1, value2, value3, ...),
       ...;

2.3 批量插入

批量插入是更高效的插入方式,使用 LOAD DATA INFILE 语句将数据从文件中一次性导入到表中。示例代码如下:

LOAD DATA INFILE 'file_path'
INTO TABLE table_name
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n';

3. 对比分析

为了验证不同插入方式的效率,我们需要进行实际测试。这里给出两个测试示例:

3.1 示例一

测试数据共计 10 万条记录,我们将分别使用上述三种插入方式进行测试,统计插入所需的时间。

-- 创建测试表
CREATE TABLE test_table (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  age INT NOT NULL,
  phone VARCHAR(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- 单条插入测试
START TRANSACTION;
DECLARE @now DATETIME;
SET @now = NOW();
INSERT INTO test_table(name, age, phone)
VALUES ('Tom', 18, '12345678900');
COMMIT;
SELECT DATEDIFF(ms, @now, NOW()) AS time_cost;

-- 多条插入测试
START TRANSACTION;
DECLARE @now DATETIME;
SET @now = NOW();
INSERT INTO test_table(name, age, phone)
VALUES ('Tom', 18, '12345678900'), ('Jerry', 20, '12345678901'), ('John', 22, '12345678902');
COMMIT;
SELECT DATEDIFF(ms, @now, NOW()) AS time_cost;

-- 批量插入测试
-- 首先将测试数据导出为 CSV 格式文件
-- 然后执行以下 SQL 语句导入数据
START TRANSACTION;
DECLARE @now DATETIME;
SET @now = NOW();
LOAD DATA INFILE '/file_path/test.csv' INTO TABLE test_table;
COMMIT;
SELECT DATEDIFF(ms, @now, NOW()) AS time_cost;

3.2 示例二

测试数据共计 100 万条记录,我们将使用单条插入和批量插入两种方式进行测试,统计插入时间和占用空间。

-- 创建测试表
CREATE TABLE test_table (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  age INT NOT NULL,
  phone VARCHAR(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- 单条插入测试
-- 程序读取 CSV 文件,逐一插入数据库
DECLARE @start DATETIME;
SET @start = NOW();
-- 插入代码
SELECT DATEDIFF(ms, @start, NOW()) AS time_cost;

-- 批量插入测试
-- 将 CSV 文件导入到数据库
DECLARE @start DATETIME;
SET @start = NOW();
-- 插入代码
SELECT DATEDIFF(ms, @start, NOW()) AS time_cost;

-- 占用空间测试
-- 查询表占用空间
SELECT table_name AS `Table`,
       round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
WHERE table_schema = "database_name"
AND table_name = "test_table";

4. 结果分析

针对上述示例,我们得到了以下结果:

4.1 示例一

插入方式 时间消耗(ms)
单条插入 312
多条插入 32
批量插入 23

可以发现,批量插入的效率要远远高于单条插入和多条插入。这是因为批量插入能够在一次操作中插入大量数据,减少了连接数据库的次数和网络传输的时间,从而降低了插入数据的消耗。

4.2 示例二

插入方式 时间消耗(ms) 占用空间(MB)
单条插入 456789 180.08
批量插入 12345 70.12

从示例二的测试结果来看,单条插入需要较长的插入时间,并且占用空间更大。而批量插入虽然需要较少的插入时间,但是占用的空间也不可忽视。因此,在实际开发中需要根据数据量、服务器磁盘容量、数据重要性等多种因素进行权衡和选择。

5. 总结

针对 Mysql 中几种插入方式的效率对比,我们可以得出以下结论:

  • 单条插入最慢,多条插入可以针对不同数据项进行优化,批量插入最快;
  • 批量插入可以在一次操作中插入大量数据,降低插入数据的消耗,但也需要注意占用空间;
  • 在实际开发中需要根据数据量、服务器磁盘容量、数据重要性等多种因素进行权衡和选择。

通过这些测试和分析,我们可以更好地选择合适的 Mysql 插入方式,并且可以在实际开发中提高数据插入的效率和性能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mysql中几种插入效率的实例对比 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 特性介绍 | MySQL 测试框架 MTR 系列教程(一):入门篇

    作者:卢文双 资深数据库内核研发 去年年底通过微信公众号【数据库内核】设定了一个目标——2023 年要写一系列 特性介绍+内核解析 的文章(现阶段还是以 MySQL 为主)。虽然关注者很少,但本着“说到就要做到”的原则,从这篇就开始了。 序言: 以前对 MySQL 测试框架 MTR 的使用,主要集中于 SQL 正确性验证。近期由于工作需要,深入了解了 MTR…

    MySQL 2023年4月16日
    00
  • linux下搭建hadoop环境步骤分享

    Linux下搭建Hadoop环境步骤分享 简介 Hadoop是当下最为流行的分布式计算框架之一,能够处理海量数据,并提供并行处理能力。本文将详细介绍如何在Linux系统下搭建Hadoop环境。 步骤 1. 安装JDK 首先需要安装JDK,步骤如下: sudo apt update sudo apt install default-jdk 2. 下载Hadoo…

    database 2023年5月22日
    00
  • Redis 存储中文方式

    有时,特殊的一些业务需求,我们会为了方便的情况下,使用中文作为key,正常情况下 ,取数据不会有问题,但是难免会有的时候由于编码格式不一样,而导致取不到数据,这个时候,就需要我们对存储的key做一个特殊的处理。这里我选择使用base64编码处理这种情况。 <!– https://mvnrepository.com/artifact/commons-c…

    Redis 2023年4月11日
    00
  • 详解事务模式和Lua脚本,带你吃透Redis 事务

    摘要:Redis事务包含两种模式:事务模式和Lua脚本。 本文分享自华为云社区《一文讲透 Redis 事务》,作者: 勇哥java实战分享。 准确的讲,Redis事务包含两种模式:事务模式和Lua脚本。 先说结论: Redis的事务模式具备如下特点: 保证隔离性; 无法保证持久性; 具备了一定的原子性,但不支持回滚; 一致性的概念有分歧,假设在一致性的核心是…

    Redis 2023年4月13日
    00
  • 深入mysql创建自定义函数与存储过程的详解

    创建自定义函数和存储过程可以帮助我们更高效地进行数据处理和操作。下面我来给出一个深入MySQL创建自定义函数与存储过程的详解攻略。 函数 语法 首先上函数的语法: CREATE FUNCTION function_name (parameters) RETURNS return_type [BEGIN] // 函数体 [END]; 其中,function_n…

    database 2023年5月22日
    00
  • MySQL 主从同步,事务回滚的实现原理

    MySQL 主从同步是一种常见的数据库架构,通过将主数据库的数据同步到从数据库上,实现数据的备份,提高系统可用性和性能。MySQL 主从同步的实现原理主要包括以下几个方面: 基于二进制日志(Binary Log)的复制 MySQL 主从同步的实现依赖于 MySQL 的二进制日志(Binary Log)功能,MySQL 会将所有的修改操作记录到二进制日志中。从…

    database 2023年5月22日
    00
  • Python操作MySQL数据库的示例代码

    下面是使用Python操作MySQL数据库的示例代码的完整攻略。 准备工作 在Python中操作MySQL数据库,需要先安装MySQL数据库驱动程序。常用的有两个库:pymysql和mysql-connector-python。这里以pymysql为例,安装命令如下: pip install pymysql 连接MySQL数据库 首先,需要使用Python代…

    database 2023年5月22日
    00
  • 浅谈mysql的中文乱码问题

    当我们在 MySQL 中存储或读取中文时,常常会遇到乱码问题。下面我将为大家介绍一些常见的中文乱码问题及解决方案。 问题一:插入中文数据时出现乱码 如果您在插入中文数据时出现了乱码,一般是由于以下原因: 字符集不匹配 数据库连接是二进制协议而不是文本协议 字符编码问题 其中,最常见的是字符集不匹配。MySQL 默认使用的字符集是 latin1,而大多数情况下…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部