mysql导入千万级别数据

背景介绍
导入大量数据可能是为了进行测试、分析或生产环境数据迁移等目的。在实际应用中,高效地导入数据至关重要,因为传统的逐行插入可能会花费大量时间。

问题描述
导入大量数据时,常见的问题包括导入速度慢、耗时长,甚至导致数据库性能下降。使用传统的 INSERT 语句逐行插入数据,对于千万级别的数据来说是不切实际的。
下面我将介绍使用存储过程、SOURCE方法和LOAD DATA导入1000万条数据

测试表准备

-- 创建测试表
CREATE TABLE test_data (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(32)
);

存储过程生成数据

-- 插入1000万条数据
DELIMITER //
CREATE PROCEDURE generateTestData()
BEGIN
    DECLARE i INT DEFAULT 1;
    WHILE i <= 10000000 DO
        INSERT INTO test_data (name) VALUES (CONCAT('用户', i));
        SET i = i + 1;
    END WHILE;
END //
DELIMITER ;

-- 执行存储过程
CALL generateTestData();

SOURCE
首先使用java或者python等语言生成sql,插入语句。我使用的java

public class SQLFileGenerator {
    public static void main(String[] args) {
        String filePath = "data.sql"; // 生成的 SQL 文件路径
        int totalRecords = 10000000;

        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
            for (int i = 1; i <= totalRecords; i++) {
                String insertSQL = "INSERT INTO test_data (name) VALUES ('用户" + i + "');";
                writer.write(insertSQL);
                writer.newLine();

                if (i % 1000 == 0) {
                    writer.flush(); // 每1000条语句刷新一次缓冲区
                }
            }

            System.out.println("SQL file generated successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

生成了之后使用source进行导入

source D:\IdeaProjects\demos\data.sql

Mysql source命令报错

  • 情况一:目录包含中文
    在这里插入图片描述
    放到没有中文的路径再执行
  • 情况二:不小心加了分号
    在这里插入图片描述

mysql会将分号当做文件名的一部分 固然报错

  • 情况三:没有选择数据库
    使用 use加数据库名 选择数据库后再执行

LOAD DATA导入数据
使用java生成数据文件

public class SQLFileGenerator {
    public static void main(String[] args) {
        String filePath = "data.txt"; // 生成的 SQL 文件路径
        int totalRecords = 10000000;

        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
            for (int i = 1; i <= totalRecords; i++) {
                String insertSQL = i+" 用户" + i ;
                writer.write(insertSQL);
                writer.newLine();

                if (i % 1000 == 0) {
                    writer.flush(); // 每1000条语句刷新一次缓冲区
                }
            }

            System.out.println("SQL file generated successfully!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述
执行sql语句

LOAD DATA INFILE 'D:\\IdeaProjects\\demos\\data.txt'
INTO TABLE test_data
FIELDS TERMINATED BY ' ' -- 分隔符,例如逗号
LINES TERMINATED BY '\r\n' -- 换行符,例如 Windows 下的回车换行
-- IGNORE 1 LINES; -- 忽略文件中的第一行(表头等)

在这里插入图片描述
1000万的数据导入一共花了49s
查询记录的条数

select count(1) from test_data;

在这里插入图片描述

如果出现ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement错误
请参考这篇博客
https://blog.csdn.net/qq_44732146/article/details/135364476

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《动手学深度学习》学习笔记 第7章 现代卷积神经网络

本系列为《动手学深度学习》学习笔记 书籍链接&#xff1a;动手学深度学习 笔记是从第四章开始&#xff0c;前面三章为基础知识&#xff0c;有需要的可以自己去看看 关于本系列笔记&#xff1a; 书里为了让读者更好的理解&#xff0c;有大篇幅的描述性的文字&#xff0c;内容很…

计算机组成原理-总线的性能指标

文章目录 总览总线周期 总线时钟周期 总线工作频率 总线时钟频率总线宽度 总线带宽例题串行总线和并行总线的速度&#xff08;带宽&#xff09;比较总线复用 信号线数总结 总览 总线周期 总线时钟周期 总线工作频率 总线时钟频率 一个总线周期就是指利用总线传输一组数据需要的…

如何设计企业级业务流程?学习华为的流程六级分类经验

业务流程管理&#xff08;BPM&#xff09;是一种系统化的方法&#xff0c;用于分析、设计、执行、监控和优化组织的业务流程&#xff0c;以实现预期的目标和价值。业务流程管理中&#xff0c;流程的分级方法有多种&#xff0c;常见的有以下几种&#xff1a; APQC的流程分级方法…

Wpf 使用 Prism 实战开发Day08

备忘录页面设计 1.效果图 一.布局设计跟第7章节一样&#xff0c;只是内容方面发生变化&#xff0c;其他样式都一样。直接把代码粘出来了 MemoView.xaml 页面代码 <UserControl x:Class"MyToDo.Views.MemoView"xmlns"http://schemas.microsoft.com/winfx/2…

DrGraph原理示教 - OpenCV 4 功能 - 颜色变幻

二值化是逐像素处理&#xff0c;而逐像素处理会有很多效果&#xff0c;这主要是给人眼看的&#xff0c;因为像素值的变化&#xff0c;直观的就是图像变化&#xff0c;比如颜色。 颜色变幻处理 OpenCV提供了一些图片&#xff0c;如下&#xff1a; 粗看是一些风格&#xff0c;…

八大算法排序@计数排序(C语言版本)

目录 计数排序概念算法思想算法步骤代码实现时间复杂度空间复杂度特性总结 计数排序 概念 计数排序&#xff08;Counting Sort&#xff09;是一种线性时间复杂度的排序算法&#xff0c;适用于排序一定范围内的整数数组。它利用了输入序列的数值范围来确定每个元素在输出序列中…

dmetl5授权查看与更新

1.查看dmetl5授权到期时间 需要登录管理端&#xff0c;菜单栏选择“管理”-“license管理”即可查看授权到期时间。如下图&#xff1a; 2.dmetl5更新授权的方法 dmetl5的<安装目录>\scheduler\config路径下&#xff0c;默认会有一个trail.key的文件&#xff0c;删除后&am…

24、Web攻防——通用漏洞SQL注入MYSQL跨库ACCESS偏移

文章目录 一、SQL注入原理   脚本代码在与数据库进行数据通讯时&#xff08;从数据库取出相关数据进行页面显示&#xff09;&#xff0c;使用预定义的SQL查询语句进行数据查询。能通过参数传递自定义值来实现SQL语句的控制&#xff0c;执行恶意的查询操作&#xff0c;例如查询…

服务异步通讯---RabbitMQ实用篇

目录 一、初识MQ 一、同步调用 1、同步通讯和异步通讯 2、同步调用的问题 3.同步调用总结 二、异步调用 1、优势&#xff1a; ​编辑 2、异步总结 二、什么是MQ 一、RabbitMQ快速入门 1、RabbitMQ的结构和概念 2、常见消息模型 2.1、基础消息队列模型 2.2、总结 二…

高效管理版本控制,Cornerstone 4 for Mac助您成为SVN专家

在软件开发和团队合作中&#xff0c;版本控制是一个至关重要的环节。为了帮助开发者更加高效地管理和控制代码版本&#xff0c;Cornerstone 4 for Mac应运而生。作为一款功能强大的SVN&#xff08;Subversion&#xff09;管理工具&#xff0c;Cornerstone 4 for Mac为Mac用户提…

IO进程线程 day2

1.使用fread、fwrite完成两个文件的拷贝 #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, const char *argv[]) {//判断输入是否合法if(argc>3){printf("输入不合法\n");return -1;}//定义两个文件指针&#…

低代码搭建,助力批发零售行业解决方案的快速实现

引言 随着技术的快速发展&#xff0c;低代码技术作为一种高效的业务解决方案&#xff0c;正日益在批发零售行业中展现其巨大的应用潜力。其所带来的快速搭建、灵活性和成本效益&#xff0c;对于现代批发零售业务的管理和发展具有重要意义。 本文旨在探讨低代码技术在批发零售…

努力打工的你存到钱了?2024新蓝海创业项目/适合普通人创业项目

为什么有钱人那么有钱&#xff1f;是他们够努力吗&#xff1f;有一位网友回答是这样回答的&#xff1a; “从小到大我所接触到的一切成功&#xff0c;他的基础都是努力&#xff0c;甚至于奉承时的吃得苦上苦方为人上人。但是那天我的三观出现了认知错误&#xff0c;光靠努力赚…

【番外】【Airsim in Windows WSL2-Ubuntu20.04-ROS】环境配置大全

【番外】【Airsim in Windows & WSL2-Ubuntu20.04-ROS】环境配置大全 【前言&#xff08;可省略不看&#xff09;】1.在windows上面部署好UE4AirSim联合仿真环境2.在windows上面部署wsl2系统以及在wsl2上面部署ubuntu系统3.安装好ubuntu系统之后&#xff0c;目前只能在命令…

手敲MyBatis(十四章)-解析含标签的动态SQL语句

1.前言 这一章主要的就是要解析动态标签里的Sql语句&#xff0c;然后进行条件语句的拼接&#xff0c;动态标签实现了trim和if标签&#xff0c;所以Sql节点就要加上TrimSqlNode和ifSqlNode&#xff0c;我们最终要获取Sql源&#xff0c;动态Sql语句需要一些处理&#xff0c;所以…

AI原生应用开发“三板斧”亮相WAVE SUMMIT+2023

面对AI应用创新的风口跃跃欲试&#xff0c;满脑子idea&#xff0c;却苦于缺乏技术背景&#xff0c;不得不望而却步&#xff0c;这曾是许多开发者的苦恼&#xff0c;如今正在成为过去。 12月28日&#xff0c;WAVE SUMMIT深度学习开发者大会2023在北京举办。百度AI技术生态总经理…

文件监控软件丨文件权限管理工具

文件已经成为企业最重要的资产之一。然而&#xff0c;文件的安全性和完整性经常受到威胁&#xff0c;如恶意软件感染、人为误操作、内部泄密等。 为了确保文件的安全&#xff0c;文件监控软件应运而生。本文将深入探讨文件监控软件的概念、功能、应用场景和未来发展等方面。 文…

Grafana UI 入门使用

最近项目上需要使用Grafana来做chart&#xff0c;因为server不是我在搭建&#xff0c;所以就不介绍怎么搭建grafana server&#xff0c;而是谈下怎么在UI上具体操作使用了。 DOCs 首先呢&#xff0c;贴一下官网doc的连接&#xff0c;方便查询 Grafana open source documenta…

【数据库原理】(6)关系数据库的关系操作集合

基本关系操作 关系数据操作的对象都是关系,其操作结果仍为关系,即集合式操作。关系数据库的操作可以分为两大类&#xff1a;数据查询和数据更新。这些操作都是基于数学理论&#xff0c;特别是集合理论。下面是对这些基本操作的解释和如何用不同的关系数据语言来表达这些操作的…

Objects are not valid as a React child (found: object with keys {name}).

在jsx中可以嵌套表达式&#xff0c;将表达式作为内容的一部分&#xff0c;但是要注意&#xff0c;普通对象不能作为子元素&#xff1b;但是数组&#xff0c;react元素对象是可以的 如下&#xff1a;不能将stu这个对象作为子元素放 function App() {const myCal imgStyleconst…