ZBLOG

mysql -uuniemm -pEmm@2020 --force -Demm_manager -e "INSERT INTO person_info (name, birthday, age, gender) VALUES ('张三', '1990-05-15', 33, 'Male');" 这样写入数据太慢了,有没有快速写入的方法

MySQL 快速数据写入优化方法

针对你的 MySQL 插入命令速度慢的问题,以下是几种有效的优化方案:

1. 批量插入(最有效的方法)

mysql -uuniemm -pEmm@2020 --force -Demm_manager <<EOF
INSERT INTO person_info (name, birthday, age, gender) VALUES 
('张三', '1990-05-15', 33, 'Male'),
('李四', '1985-08-20', 38, 'Female'),
('王五', '1995-03-10', 28, 'Male');
-- 可以一次性添加几百甚至上千条记录
EOF

优势:减少网络往返和SQL解析开销,性能可提升数十倍。

2. LOAD DATA INFILE(最快的大批量导入方式)

# 先创建CSV文件
echo '"张三","1990-05-15",33,"Male"' > data.csv
echo '"李四","1985-08-20",38,"Female"' >> data.csv

# 使用LOAD DATA导入
mysql -uuniemm -pEmm@2020 -Demm_manager -e "
LOAD DATA LOCAL INFILE 'data.csv' 
INTO TABLE person_info 
FIELDS TERMINATED BY ',' ENCLOSED BY '\"'
(name, birthday, age, gender)"

优势:比普通INSERT快10-100倍,特别适合上万条记录。

3. 临时调整MySQL配置(针对大批量导入)

-- 在导入前执行(会话级设置)
SET autocommit=0;
SET unique_checks=0;
SET foreign_key_checks=0;
SET sql_log_bin=0;

-- 执行你的INSERT语句...

COMMIT; -- 最后统一提交

-- 恢复设置
SET autocommit=1;
SET unique_checks=1;
SET foreign_key_checks=1;
SET sql_log_bin=1;

4. Shell脚本生成批量SQL

#!/bin/bash
for i in {1..1000}; do
    echo "('用户$i','199$((RANDOM%10))-$((RANDOM%12+1))-$((RANDOM%28+1))',$((RANDOM%50+18)),'$([ $((RANDOM%2)) -eq 0 ] && echo Male || echo Female)')"
done | sed "1s/^/INSERT INTO person_info (name, birthday, age, gender) VALUES /; \$!s/$/,/; \$s/$/;/" > bulk_insert.sql

mysql -uuniemm -pEmm@2020 -Demm_manager < bulk_insert.sql

5. Python等编程语言批量操作示例

import pymysql

db = pymysql.connect(host='localhost', user='uniemm', password='Emm@2020', database='emm_manager')
cursor = db.cursor()

data = [("张三", "1990-05-15", 33, "Male"), 
        ("李四", "1985-08-20", 38, "Female")] * 500 # ×500次

query = "INSERT INTO person_info (name, birthday, age, gender) VALUES (%s,%s,%s,%s)"
cursor.executemany(query, data)
db.commit()

MySQL服务器端优化建议

如果可能,还可以考虑:

  1. 禁用索引:导入前删除索引,完成后再重建
  2. 增大缓冲区:临时增加 innodb_buffer_pool_size
  3. 使用事务:多条插入放在一个事务中

选择哪种方法取决于你的具体场景和数据量大小。对于少量数据(几十条),方法1足够;对于上万条数据,推荐方法2或4。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23550

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?