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

yizhihongxing

针对 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 操作数据库基础详解

    MySQL 操作数据库基础详解 MySQL 是一种基于关系型数据库管理系统的开源软件。它能够提供数据存储、访问和管理的能力。MySQL 操作数据库有多种方式,包括使用命令行、使用图形用户界面和使用编程语言对数据库进行操作。在本文中,我们将介绍如何使用命令行方式操作 MySQL 数据库。 连接 MySQL 数据库 在进行任何操作之前,必须先连接到数据库。使用以…

    database 2023年5月22日
    00
  • SQL 计算一年有多少天

    计算一年有多少天可以使用 SQL 查询语言中的日期函数和数学函数。在 SQL 中,日期函数 DATEADD 可以让我们新增一定时间单位到日期上,而数学函数 DATEDIFF 可以用来计算两个日期之间的时间差。通过这两个函数,我们可以比较容易地计算一年有多少天。 以下是两条 SQL 实例: 示例 1:计算一年有多少天 SELECT DATEDIFF(DAY, …

    database 2023年3月27日
    00
  • redis 命令都在这了

    DEL key [key …]删除指定的key(一个或多个) DUMP key导出key的值 EXISTS key [key …]查询一个key是否存在 EXPIRE key seconds设置一个key的过期的秒数 EXPIREAT key timestamp设置一个UNIX时间戳的过期时间 KEYS pattern查找所有匹配给定的模式的键 MI…

    Redis 2023年4月12日
    00
  • MySQL插入数据与查询数据

    MySQL是一个开源的关系型数据库系统,在使用MySQL时,插入数据和查询数据是最基础也是最常用的操作之一。本文将详细讲解MySQL插入数据与查询数据的操作流程。 MySQL插入数据 MySQL插入数据是将数据插入到数据库表中的过程。其基本语法格式如下所示: INSERT INTO table_name (column1, column2, column3,…

    database 2023年5月21日
    00
  • 宝塔面板mysql无法启动问题的分析和解决

    下面我将为您详细讲解“宝塔面板mysql无法启动问题的分析和解决”的完整攻略。 一、问题分析: 宝塔面板中的Mysql服务无法启动,表现为面板上Mysql状态显示为“未启动”,Web服务器无法连接Mysql服务。 二、问题解决: 1.通过查看宝塔面板Mysql日志可以找到问题存在地方,找到错误提示内容后,可以根据错误提示逐个排查问题。 下面是一个示例: 在宝…

    database 2023年5月21日
    00
  • mysql 字符集的系统变量说明

    MySQL 字符集是 MySQL 数据库中用来存储数据的编码方式。设置适当的字符集可以避免在存储、操作和显示数据时出现乱码问题。在 MySQL 中,有一些系统变量与字符集有关,我们来详细了解一下。 character_set_client 该系统变量规定 MySQL 客户端连接时使用的字符集。当客户端使用该字符集向 MySQL 服务器提交数据时,MySQL …

    database 2023年5月22日
    00
  • 编写脚本令Xtrabackup对MySQL数据进行备份的教程

    下面我将详细讲解如何编写脚本令Xtrabackup对MySQL数据进行备份。 什么是Xtrabackup Xtrabackup 是一个由 Percona 提供的、支持 InnoDB 引擎在线热备的 MySQL 数据库备份工具,它可以在 MySQL 数据库运行的情况下备份、恢复 InnoDB、XtraDB 和 MariaDB 数据库,并可以还原到不同的 MyS…

    database 2023年5月22日
    00
  • 基于EasyExcel实现百万级数据导入导出详解

    让我来详细讲解一下“基于EasyExcel实现百万级数据导入导出详解”的完整攻略。 简介 EasyExcel是Alibaba开源的Excel工具,可以用于读取、写入和处理Excel文件。它基于POI实现,具有易用、高效、可扩展等优点。 在本攻略中,我们将使用EasyExcel实现百万级数据的导入导出,以及解决导入时可能出现的性能问题。 准备工作 在实现具体功…

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