Mysql千万级别数据批量插入insert

批量插入比单条插入速度快

INSERT INTO table (field1,field2,field3) VALUES (‘a’,”b”,”c”), (‘a’,”b”,”c”),(‘a’,”b”,”c”);

INSERT INTO table (field1,field2,field3) VALUES (‘a’,”b”,”c”);INSERT INTO table (field1,field2,field3) VALUES (‘a’,”b”,”c”);INSERT INTO table (field1,field2,field3) VALUES (‘a’,”b”,”c”);

使用1的批量插入写法,能大大提高插入速度。

合理利用数据库buffer

可以调大bulk_insert_buffer_size这个参数。默认为8M。
在这里插入图片描述
这个参数仅作用于使用 MyISAM存储引擎,用来缓存批量插入数据的时候临时缓存写入数据。mysql会使用这个内存区域来缓存批量结构的数据以帮助批量写入数据文件。
例如将该buffer大小设置为100M。
set global bulk_insert_buffer_size = 10241024100;

用INSERT DELAYED延迟插入

这个insert delayed不同之处在于:立即返回结果,后台进行处理插入。

当一个客户端使用INSERT DELAYED时,会立刻从服务器处得到一个确定。并且行被排入队列,当表没有被其它线程使用时,此行被插入。
使用INSERT DELAYED的另一个重要的好处是,来自许多客户端的插入被集中在一起,并被编写入一个块。这比执行许多独立的插入要快很多。
需要注意:

  1. INSERT DELAYED应该仅用于指定值清单的INSERT语句。服务器忽略用于INSERT DELAYED…SELECT语句的DELAYED。
  2. 服务器忽略用于INSERT DELAYED…ON DUPLICATE UPDATE语句的DELAYED。
  3. 因为在行被插入前,语句立刻返回,所以您不能使用LAST_INSERT_ID()来获取AUTO_INCREMENT值。AUTO_INCREMENT值可能由语句生成。
  4. 对于SELECT语句,DELAYED行不可见,直到这些行确实被插入了为止。
  5. DELAYED在从属复制服务器中被忽略了,因为DELAYED不会在从属服务器中产生与主服务器不一样的数据。
  6. 目前在队列中的各行只保存在存储器中,直到它们被插入到表中为止。这意味着,如果您强行中止了mysqld(例如,使用kill -9) 或者如果mysqld意外停止,则所有没有被写入磁盘的行都会丢失。
好的,下面是将5万条记录批量插入MySQL的三个简单步骤: 1. 构建插入语句:首先,你需要构建一个插入语句,用于将数据插入到MySQL中。例如,如果你要将数据插入到名为“mytable”的表中,可以使用以下语句: ``` INSERT INTO mytable (column1, column2, column3, ...) VALUES (value1, value2, value3, ...), (value1, value2, value3, ...), ... ``` 其中,column1、column2、column3等是表中的列名,而value1、value2、value3等是要插入的数据值。 2. 生成数据:其次,你需要生成要插入的数据。可以使用Python、Java等编程语言编写脚本来生成数据。例如,以下是使用Python生成随机数据的示例代码: ``` import random # 生成5万条数据 num_records = 50000 # 生成数据并将其存储在列表中 data = [] for i in range(num_records): column1 = random.randint(1, 100) column2 = random.choice(['foo', 'bar', 'baz']) column3 = random.uniform(0, 1) data.append((column1, column2, column3)) ``` 在这个示例中,我们使用了Python的random模块来生成随机数据。我们首先定义了要生成的数据量(即5万条记录),然后使用循环生成数据并将其存储在一个列表中。最后,我们将数据列表传递给插入语句中的VALUES子句。 3. 执行插入语句:最后,你需要将插入语句发送给MySQL服务器并执行它。可以使用Python的MySQLdb模块或Java的JDBC API等工具来执行插入语句。以下是Python使用MySQLdb模块执行插入语句的示例代码: ``` import MySQLdb # 连接到MySQL服务器 db = MySQLdb.connect(host="localhost", user="root", passwd="password", db="mydatabase") # 创建游标对象 cursor = db.cursor() # 生成数据 # ... # 构建插入语句 insert_stmt = "INSERT INTO mytable (column1, column2, column3) VALUES (%s, %s, %s)" # 执行插入语句 cursor.executemany(insert_stmt, data) # 提交事务 db.commit() # 关闭连接 db.close() ``` 在这个示例中,我们首先使用MySQLdb模块连接到MySQL服务器,并创建一个游标对象。然后,我们生成数据并构建插入语句,使用游标对象的executemany方法将数据插入到MySQL中。最后,我们提交事务并关闭连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值