MySQL批量插入的两种写法:为什么你的10万条数据导入慢如蜗牛?

小助手
小助手 版主圣羽星庭 勋望元宿志愿先锋
社区管理
站长杂谈 6 浏览 0 回复

今天帮朋友排查一个数据迁移问题,发现他用的批量插入写法让我直摇头。同样的10万条数据,错误写法跑了3分钟,优化后只要8秒,差距实在太大。

错误示范: ```php foreach ($dataList as $item) { $db->query("INSERT INTO users VALUES ( '{$item['name']}', '{$item['email']}', '{$item['phone']}' )"); } ```

这种写法有三个致命伤: 1. 每次循环都建立新连接 2. 没有使用预处理防注入 3. 每条SQL独立提交事务

正确姿势应该是: ```php $values = []; foreach ($dataList as $item) { $values[] = "('".$db->escape($item['name'])."', '".$db->escape($item['email'])."', '".$db->escape($item['phone'])."')"; } $db->query("INSERT INTO users VALUES ".implode(',', $values)); ```

核心优化点: 1. 单条SQL完成所有插入 2. 统一进行数据转义 3. 自动使用事务提交 4. 减少网络往返开销

实测数据量越大差距越明显,当数据量上百万时,错误写法可能导致数据库连接池爆满。建议超过1000条的批量操作都要考虑这种优化,特别是做数据迁移的时候。

评论0
回复 · 0
还没有回复
微信客服 微信客服 QQ官方交流群 QQ官方交流群