Mysql快速插入千万条数据的实战教程
在实际开发过程中,经常需要批量插入大量数据,如何高效地插入千万条数据是一个非常实用的技能。在本文中,我们将探讨如何使用Mysql进行快速批量插入千万条数据。
1. 准备工作
- 创建数据库及数据表;
- 准备好要插入的数据,以CSV文件形式存在;
2. 导入CSV文件
使用LOAD DATA INFILE语句将CSV文件导入到Mysql数据库中。
示例1:导入单个CSV文件 data.csv
到数据表 table1
中。
LOAD DATA INFILE 'data.csv'
INTO TABLE table1
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';
示例2:批量导入多个CSV文件到多个数据表中,使用shell脚本实现(以Linux系统为例)。
#!/bin/bash
for file in /path/to/csv/files/*.csv
do
table_name=$(basename "$file" .csv)
mysql -uUSERNAME -pPASSWORD -DDBNAME -e "LOAD DATA INFILE '$file' INTO TABLE $table_name FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';"
done
3. 分批次插入数据
当要插入的数据量非常大时,考虑将数据按照一定的批次进行插入。
示例3:使用Python脚本实现将千万条数据分批次插入到数据表 table2
中。
import csv
import pymysql
batch_size = 5000
def connect_mysql():
conn = pymysql.connect(
host='localhost',
port=3306,
user='USERNAME',
password='PASSWORD',
db='DBNAME',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
return conn
def insert_data(batch_data):
conn = connect_mysql()
cursor = conn.cursor()
try:
sql = "INSERT INTO table2 (column1, column2, column3) VALUES (%s, %s, %s)"
cursor.executemany(sql, batch_data)
conn.commit()
except Exception as e:
conn.rollback()
print(e)
finally:
cursor.close()
conn.close()
def main():
with open('data.csv', 'r', encoding='utf-8') as f:
reader = csv.reader(f)
headers = next(reader)
batch_data = []
for row in reader:
batch_data.append((row[0], row[1], row[2]))
if len(batch_data) == batch_size:
insert_data(batch_data)
batch_data = []
if batch_data:
insert_data(batch_data)
if __name__ == '__main__':
main()
以上就是如何使用Mysql快速插入千万条数据的实战教程,希望对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mysql快速插入千万条数据的实战教程 - Python技术站