`

MySQL 如何快速插入大量数据

 
阅读更多

这几天尝试了使用不同的存储引擎大量插入MySQL表数据,主要试验了MyISAM存储引擎和InnoDB。下面是实验过程:

一、InnoDB存储引擎。

创建数据库和表

CREATE DATABASE ecommerce;
CREATE TABLE employees (     
    id INT NOT NULL,     
    fname VARCHAR(30),     
    lname VARCHAR(30),  
    birth TIMESTAMP,	   
    hired DATE NOT NULL DEFAULT '1970-01-01',     
    separated DATE NOT NULL DEFAULT '9999-12-31',     
    job_code INT NOT NULL,     
    store_id INT NOT NULL    
) 
       
partition BY RANGE (store_id) (     
    partition p0 VALUES LESS THAN (10000),     
    partition p1 VALUES LESS THAN (50000),     
    partition p2 VALUES LESS THAN (100000),     
    partition p3 VALUES LESS THAN (150000),
    Partition p4 VALUES LESS THAN MAXVALUE     
);

 

创建存储过程

use ecommerce;
CREATE PROCEDURE BatchInsert(IN init INT, IN loop_time INT)
BEGIN
	DECLARE Var INT;
	DECLARE ID INT;
	SET Var = 0;
	SET ID = init;
     	WHILE Var < loop_time DO
     	insert into employees(id,fname,lname,birth,hired,separated,job_code,store_id) values(ID,CONCAT('chen',ID),CONCAT('haixiang',ID),Now(),Now(),Now(),1,ID);
     	SET ID = ID + 1;
     	SET Var = Var + 1;
     	END WHILE;
END;

 

调用存储过程插入数据

CALL BatchInsert(30036,200000)

用时:3h 37min 8sec

二、MyISAM存储引擎

创建表

use ecommerce;
CREATE TABLE ecommerce.customer (
   id INT NOT NULL,
   email VARCHAR(64) NOT NULL,
   name VARCHAR(32) NOT NULL,
   password VARCHAR(32) NOT NULL,
   phone VARCHAR(13),
   birth DATE,
   sex INT(1),
   avatar BLOB,
   address VARCHAR(64),
   regtime DATETIME,
   lastip VARCHAR(15),
   modifytime TIMESTAMP NOT NULL,
  PRIMARY KEY (id)
)ENGINE = MyISAM ROW_FORMAT = DEFAULT
partition BY RANGE (id) (     
    partition p0 VALUES LESS THAN (100000),     
    partition p1 VALUES LESS THAN (500000),     
    partition p2 VALUES LESS THAN (1000000),     
    partition p3 VALUES LESS THAN (1500000),
    partition p4 VALUES LESS THAN (2000000),
    Partition p5 VALUES LESS THAN MAXVALUE     
);

 

创建存储过程

use ecommerce;
DROP PROCEDURE IF EXISTS ecommerce.BatchInsertCustomer;
CREATE PROCEDURE BatchInsertCustomer(IN start INT,IN loop_time INT)
BEGIN
	DECLARE Var INT;
	DECLARE ID INT;
	SET Var = 0;
	SET ID= start;
     	WHILE Var < loop_time 
        DO
     	insert into customer(ID,email,name,password,phone,birth,sex,avatar,address,regtime,lastip,modifytime) 
		values(ID,CONCAT(ID,'@sina.com'),CONCAT('name_',rand(ID)*10000 mod 200),123456,13800000000,adddate('1995-01-01',(rand(ID)*36520) mod 3652),Var%2,'http://t3.baidu.com/it/u=2267714161,58787848&fm=52&gp=0.jpg','北京市海淀区',adddate('1995-01-01',(rand(ID)*36520) mod 3652),'8.8.8.8',adddate('1995-01-01',(rand(ID)*36520) mod 3652));
     	SET Var = Var + 1;
     	SET ID= ID + 1;
     	END WHILE;
END;

 

调用存储过程插入数据

ALTER  TABLE  customer  DISABLE  KEYS; 
CALL BatchInsertCustomer(1,2000000);
ALTER  TABLE  customer  ENABLE  KEYS;

 

用时:8min 50sec

通过以上对比发现对于插入大量数据时可以使用MyISAM存储引擎,如果再需要修改MySQL存储引擎可以使用命令:

ALTER TABLE t ENGINE = MYISAM;

 

分享到:
评论

相关推荐

    C#在MySQL大量数据下的高效读取、写入详解

    本文将探讨如何高效地读取和写入大量数据,主要分为三个步骤:解决读取问题、数据处理和数据插入。 ### 第一步:解决读取问题 1. **避免使用重型ORM框架**:如Entity Framework和NHibernate,这些框架在处理大数据...

    从MySQL导入导出大量数据的程序实现方法

    当处理大量数据时,PHPmyadmin虽然提供了便捷的导入导出功能,但可能会遇到一些限制,如文件大小限制和特殊字符处理问题。针对这些挑战,我们可以采用自定义脚本来实现更灵活的数据操作。 首先,我们来看导出程序。...

    C#.NET中如何批量插入大量数据到数据库中

    2. **批量插入(Bulk Insert)**:SQL Server 提供了一个`SqlBulkCopy`类,用于快速地将大量数据从一个数据源(如DataTable或DataReader)复制到SQL Server表中。这比逐行插入要快得多。 ```csharp using ...

    利用poi获取excel数据批量插入大量数据到mysql

    在IT行业中,处理大量数据是常见的任务之一,尤其是在数据分析、报表生成或数据迁移等领域。本教程将详述如何使用Apache POI库读取Excel数据,并通过Java的JDBC接口批量插入到MySQL数据库中。Apache POI是Java平台上...

    mysql-oracle数据同步

    批量同步则是在特定时间点进行一次性的大量数据迁移,比如在业务低峰期。 对于“mysql-oracle数据同步”这个主题,我们可以采用以下几种方法: 1. **使用ETL工具**:Extract, Transform, Load(ETL)工具如...

    mysql 大批量插入测试数据

    数据库,大批量插入测试数据,可用于生成随机数据

    python工具-excel批量导入mysql (几千万数据半小时可搞定)

    在本例中,提供的`excelImport.py`脚本应该包含了上述部分或全部逻辑,用于实现快速批量导入Excel数据到MySQL数据库。根据实际需求,你可以对脚本进行调整,例如适应不同的数据库字段结构或处理更多Excel文件。

    C++操作MySQL大量数据插入效率低下的解决方法

    通常来说C++操作MySQL的时候,往Mysql中插入10000条简单数据,速度非常缓慢,居然要5分钟左右, 而打开事务的话,一秒不到就搞定了! 具体实现代码如下: #include #include #include #include "mysql.h" #...

    批量插入大量数据

    在数据库操作中,批量插入大量数据是常见的性能优化策略,特别是在大数据处理或系统初始化时。批量插入能够显著减少网络通信次数,提升效率,降低数据库事务的开销。本例展示了如何在4秒内高效地插入10万条数据,...

    mysql百万级测试数据下载 300W条

    10. **安全测试**:测试权限控制、审计日志等功能,确保在大量数据情况下,信息的安全性。 总之,"mysql百万级测试数据下载 300W条"为数据库测试提供了一个理想的数据环境。通过这些数据,开发者和测试人员能够全面...

    Excel大量数据快速导入数据库源码

    标题 "Excel大量数据快速导入数据库源码" 描述的是一个编程解决方案,用于高效地将Excel电子表格中的大量数据批量导入到数据库系统中。这个过程通常涉及到数据预处理、数据清洗和数据传输等步骤,是数据处理工作流程...

    提高mysql插入数据的速度.pdf

    - 尽管这不在文档中直接提及,但提升磁盘I/O性能对于提高MySQL插入速度同样重要。这包括优化文件系统、使用更快的磁盘或者使用SSD等措施。 9. 使用第三方工具监控和管理: - 使用如Unix的top、Windows的任务管理...

    MySQL数据库迁移快速导出导入大量数据

    `SELECT INTO OUTFILE`和`LOAD DATA INFILE`是快速处理大量数据的有效工具,但在实际操作中,需要根据具体情况调整参数,以确保数据完整性和一致性。此外,迁移前在新服务器上预先创建表结构,以及监控迁移过程,都...

    mysql大批量数据插入

    MySQL 大批量数据插入是指在短时间内将大量数据插入到 MySQL 数据库中,需要设计目标要求能支持平均每秒插入 1000 条数据以上。MySQL 提供了多种方法来实现大批量数据插入,包括使用批量插入语句、使用 LOAD DATA ...

    excel数据导入mysql工具

    它可以存储大量数据,且提供了SQL语言来执行查询、更新和管理数据,适合处理复杂的数据关系和事务。 “xls2sql”工具就是为了解决Excel与MySQL之间的数据转换问题。它允许用户将Excel文件中的数据批量导入到MySQL...

    利用Flume将MySQL表数据准实时抽取到HDFS、MySQL、Kafka

    标题中的“利用Flume将MySQL表数据准实时抽取到HDFS、MySQL、Kafka”是一项数据集成任务,涉及Apache Flume、MySQL数据库、Hadoop Distributed File System (HDFS) 和Apache Kafka这四个关键技术。Flume是Apache的一...

    mysql导入大量数据

    ### MySQL导入大量数据的方法 在处理大量的数据导入MySQL数据库时,经常会遇到一些挑战,尤其是在数据库备份文件较大的情况下(比如超过20MB)。本文将以Joomla网站的数据库导入为例,介绍如何有效地解决这个问题。...

    串口数据采集入MySQL数据库V2.0

    MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),它支持SQL语言,具有高效率、稳定性和可扩展性,适合处理大量数据。在本系统中,MySQL作为数据存储的后台,负责接收和管理来自串口的各类数据。 “串口数据...

    mysql 测试数据集,单表200万条数据

    - INSERT与UPDATE:了解如何高效地插入和更新大量数据,避免全表扫描。 - DELETE:在删除数据时注意效率,避免影响整个表的性能。 5. 数据库事务: - 事务处理:了解ACID(原子性、一致性、隔离性、持久性)特性...

    海量数据的MySQL数据集

    导入大量数据时,可以使用LOAD DATA INFILE语句,它可以显著提高数据导入速度。同时,为了防止数据导入过程中导致数据库服务中断,可以考虑在低峰时段进行,或者使用异步导入等方式。 10亿条数据的管理需要考虑到...

Global site tag (gtag.js) - Google Analytics