MySQL 8.0 执行 insert 插入数据非常缓慢的问题及解决方法

探讨了MySQL从5.7升级至8.0后,因默认开启log-bin功能导致性能下降的问题。通过关闭该功能,虽能显著提升速度,但与5.7相比仍有较大差距。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

同样的代码,在MySQL5.7上表现非常不错,到了8.0就慢得难以接受。原因是MySQL 8.0一些设置是默认开启的(5.7是默认关闭的),而这些设置有可能会严重影响数据库性能。

本题中,影响插入效率的因素是,8.0默认开启了 log-bin 功能,在确定用不到该功能的前提下,只要在配置中关闭即可。

在文件 my.ini 或 /etc/my.cnf 中,修改 mysqld 节点的内容,如下:

[mysqld]
skip-log-bin
# disable_log_bin # Linux下可使用这个
# transaction_write_set_extraction=OFF

其中 skip-log-bin 和 disable_log_bin 作用是一样的,如果一个无效,可以尝试另一个。

总结,通过该方法只能提升一部分速度:测试插入1万条,由原来的约4分钟缩减到4s。速度依然不理想,同比使用5.7测试时间不到400ms。相差近10倍。。。

### 插入数据MySQL 8.0MySQL 8.0插入数据可以通过多种方式实现,最常见的是通过 `INSERT` 语句来完成。以下是具体方法: #### 使用 INSERT INTO 语法 可以直接使用标准的 SQL `INSERT INTO` 语句向表中添加新记录。 ```sql INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); ``` 如果要一次性插入多条记录,则可以这样操作: ```sql INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1_1, value1_2, value1_3,...), (value2_1, value2_2, value2_3,...), ...; ``` 对于批量加载 CSV 文件中的数据,通常会先创建一个与目标表格结构相匹配的新临时表,再利用 LOAD DATA INFILE 或者其他工具如 Python 脚本读取并解析 CSV 文件内容后执行批量插入操作[^1]。 当涉及到修改现有数据时,应注意到某些存储过程可能会被标记为 MODIFIES SQL DATA ,这意味着它们内部包含了能够更改数据库状态的操作比如 UPDATE 和 DELETE 等[^2]。 为了确保事务处理的安全性和效率,在 InnoDB 存储引擎层面会对预构建行对象进行检查以决定是否允许提前获取记录锁[(row_prebuilt_t::can_prefetch_records)][^3]. 另外值得注意的一点是在设置好适当权限之后才能顺利地从外部源导入数据至服务器内运行着的服务实例里去。例如配置远程连接的情况下就需要调整用户的认证机制以及授权范围以便于后续的数据交互工作得以正常开展[^4].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值