Mysql数据库快速插入亿级数据

接手一个项目,该项目运行了两三年了。接手的时候,只有一个部署文档和全部代码,再没有其他文档了,也没有其他任何人了解这个项目。好吧,试着深入了解吧。代码在测试环境跑来了,整个项目算是看得七七八八了。去线网看看,我靠,mysql数据库数据已经好几十个G了。定位到其中一张表t_send_message_send,发送短信的记录表,已经一亿多条数据了,占用空间四十多个G,索引6个G多。分区吧,按时间分区,分区能加快查询速度,以后也可以分区清理数据。线网数据不敢动啊,也不会分区。保险起见,在测试环境操作熟了再说。好吧,就先在自己的破机器上造一亿条数据。
造数据方法也很多,常见的有写存储过程、写代码插入、load data导入。存储过程不熟,load data不会,我写代码吧,这个相对简单。代码参考了这位博主。https://blog.csdn.net/vicky_pyh/article/details/92088613。实践了他说的代码插入最快的一种方式,jdbc批量插入。代码如下:

package com.maanjun;import java.sql.*;
import java.util.*;public class InsertBigdata {//该代码为开启事务private long begin = 1;//起始idprivate long end = begin + 100000;//每次循环插入的数据量private String url = "jdbc:mysql://localhost:3306/marketing?useServerPrepStmts=false&rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8";private String user = "root";private String password = "123456";public void insertBigData() {//定义连接、statement对象Connection conn = null;PreparedStatement pstm = null;try {//加载jdbc驱动Class.forName("com.mysql.jdbc.Driver");//连接mysqlconn = DriverManager.getConnection(url, user, password);//将自动提交关闭// conn.setAutoCommit(false);//编写sql//String sql = "INSERT INTO t_send_message_send('plan_id', 'job_uuid','send_port','mobile','content','product_code','fake','date_push','activity_id') VALUES (?,?,?,?,?,?,?,?,?)";String sql = "INSERT INTO t_send_message_send(plan_id,job_uuid,send_port,mobile,content,product_code,fake,date_push,activity_id) VALUES (?,?,?,?,?,?,?,?,?)";//预编译sqlpstm = conn.prepareStatement(sql);Calendar cal = Calendar.getInstance();cal.setTime(new java.util.Date());long phone = 13000000000L;//开始总计时long bTimeAll = System.currentTimeMillis();//循环10次,每次十万数据,一共1000万int i = 0;for (; i < 1000; i++) {java.sql.Date pushdatetime = new java.sql.Date(cal.getTime().getTime());//开启分段计时,计1W数据耗时long bTime = System.currentTimeMillis();//开始循环while (begin < end) {//赋值pstm.setLong(1, 123456789); //plan_idpstm.setString(2, "9ccdb1d94e484cc8a477ddc2cc264c6c"); //job_uuidpstm.setString(3, "10658098"); //send_portpstm.setString(4, Long.toString(phone++));//mobilepstm.setString(5, "益农控股(广东)有限公司( 下称“益农控股”)是由广东省农业农村厅按照国家农业农村部的要求,遴选的唯一一家省级“信息进村入户工程”的运营商。公司按照“省级运营商(益农控股)+县级运营中心+益农信息社”的三级运营模式,通过打造“一个平台+千万个益农信息社”");//contentpstm.setString(6, "HELP"); //product_codepstm.setBoolean(7, false); //fakepstm.setDate(8, pushdatetime);//date_pushpstm.setInt(9, 3);//activity_id//添加到同一个批处理中pstm.addBatch();begin++;}//执行批处理pstm.executeBatch();end += 100000;//关闭分段计时long eTime = System.currentTimeMillis();//减少一天cal.add(Calendar.DATE, -1);//输出System.out.println("成功插入10W条数据耗时:" + (eTime - bTime));}//关闭总计时long eTimeAll = System.currentTimeMillis();//输出System.out.println("插入10000W数据共耗时:" + (eTimeAll - bTimeAll));} catch (SQLException e) {e.printStackTrace();} catch (ClassNotFoundException e1) {e1.printStackTrace();}}
}

实践证明确实很快,我的机器比较破,且表字段较原博主多,插入速度差不多每秒10000条,还可以。插入亿级数据差不多三四个小时。就我自己用了3个多小时,忘记截图了。

注意:
如果你的表建了索引,一定要先删掉,否则插入速度会越来越慢,慢到插入500W条数据也要半个小时,要插入亿级数据估计要到天荒地老了。数据插入完成后再建索引,重建索引也会花不少时间。就我自己而言,建了两个索引,一个varchar类型,一个datetime类型,建一个索引差不多二三十分钟。

总得来说,造亿级数据花4个小时,我已经很满意啦!

Mysql数据库快速插入亿级数据相关推荐

  1. mysql怎么快速删除亿级数据_mysql数据库如何实现亿级数据快速清理

    今天收到磁盘报警异常,50G的磁盘被撑爆了,分析解决过程如下: 1. 进入linux服务器,查看mysql文件夹中各个数据库所占的磁盘空间大小 看到了吗,光olderdb就占了25G 2. 用SQLy ...

  2. MySQL快速插入亿级数据

    MySQL快速插入亿级数据 前言 通常我们会有这样的需求:构造数据,大批量插入数据库,以供后续处理.如果是几万几十万的数据那还好说,但如果是上千万上亿的数据,那么我们对速度的追求就更加迫切. 这里我们 ...

  3. Java程序向MySql数据库中插入的中文数据变成了问号

    找到mysql的安装目录,修改my.ini文件 (1)如何找到my.ini文件 如果my.ini文件不在MySQL的安装目录下,可能放在隐藏目录,要先去找到ProgramData,(这里要先打开显示隐 ...

  4. 以高并发著称的 Go 如何与 MySQL 搭档应对千亿级数据?

    前两天看到字节一个老哥写的帖子,提到高阶开发者必须掌握的技能,其中他明确提出了"精通MySQL". 为啥MySQL对开发人员如此重要? 第一,不管你去面试哪家公司,数据库是必问项, ...

  5. 向数据库中插入千万级数据

    1. 数据库环境 1.1 MySQL版本 我用到的是MySQL5.6.38版本. 1.2 数据表创建 CREATE TABLE `student` (`id` char(32) NOT NULL,`t ...

  6. 如何往数据库快速插入百万条数据

    具体逻辑实现: 创建两个表,一个内存表,一个数据表 然后将百万数据先存入内存表,再在内存表数据导入数据表 数据库默认好像只能存13万条数据,更改ini配置 max_heap_table_size = ...

  7. mysql如何快速插入数据_如何快速向Mysql插入大量数据?

    本文摘要 本文演示了3分钟如何向MySQL数据库中插入100万条数据的实例. 一.编写测试案例向MySQL数据库中插入百万条数据.测试数据表建表脚本如下:use db_xk; drop table i ...

  8. java向mysql写入数据慢_通过java代码往mysql数据库中写入日期相关数据少13个小时...

    通过show variables like '%time_zone%'; 查看时区: CST 时区 名为 CST 的时区是一个很混乱的时区,有四种含义: 美国中部时间 Central Standard ...

  9. Mysql如何快速制造千万级上亿条数据?

    大前提 首先确保当前表中至少有一条数据. 思路 对表中数据进行指数型增加,n的2,3,4,-,x次方的递增. 命令:INSERT INTO 表名(字段1,字段2,-,字段n) SELECT (字段1, ...

最新文章

  1. [Node.js] 2、利用node-git-server快速搭建git服务器
  2. RIP协议的问题解决方案
  3. 【android开发】 修改控件Spinner内容的字体大小 颜色等属性
  4. 删除Windows服务[转载]
  5. python 管道队列_关于python:Multiprocessing-管道与队列
  6. 日志中出现乱码_合宙Luat | 乱码搞得一团糟?开源神器帮你轻松修复
  7. python整数分节输出_pyfactor
  8. 视觉SLAM笔记(28) Ceres
  9. C#的Timer解析
  10. Go VSCode配置编译task
  11. python画spc控制图_手把手教你SPC控制图怎么做以及SPC控制图分类
  12. python简单选择排序_Python实现冒泡,插入,选择排序简单实例
  13. 实验3-7 统计学生成绩 (15 分)
  14. [数论] 快速傅里叶变换FFT
  15. 委托(delegate)的三种调用方式:同步调用,异步调用,异步回调
  16. JDBC 数据库连接池 工作原理
  17. 高德开放平台GeoHUB初用(Vue使用高德地图Loca 2.0)
  18. python 求复数的模
  19. RocketMQ源码分析(十五)之文件恢复
  20. vb常用内部函数(四):随机数函数

热门文章

  1. 企业级开发平台的演进
  2. [Darktable]dt源码分析(未完)
  3. git 创建分支并推送远端
  4. tcp socket 和 socket文件
  5. optimizer(三) Adam 系列
  6. mysql如何修改字段允许为空
  7. Docker查看正在运行的容器创建时的命令
  8. html设置文本域的,HTML-文本域属性设置
  9. 计算并输出学生平均成绩。
  10. WDMycould Gen2安装SVN Server