MySQL 插入10万条数据性能分析
-- 创建测试表
CREATE TABLE `test_table` (
`id` INT NOT NULL AUTO_INCREMENT,
`data` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 插入10万条数据
INSERT INTO `test_table` (`data`) VALUES
('Sample data'),
('Sample data'),
...
('Sample data'); -- 重复10万次
在实际应用中,直接插入10万条数据可能会非常慢,因为每次插入都会触发磁盘I/O和数据的索引更新。为了提高性能,可以考虑以下方法:
- 批量插入:使用一条INSERT语句插入多行数据,减少与数据库的通信次数。
- 禁用索引:在插入前暂时禁用索引,插入完成后重新创建索引。
- 禁用自动提交:可以通过
SET autocommit=0;
来禁用自动提交,这样可以减少事务的开销。 - 调整批大小:根据服务器的配置和资源,适当调整批量插入的数据行数。
示例批量插入代码:
-- 禁用自动提交
SET autocommit=0;
-- 禁用索引
ALTER TABLE `test_table` DISABLE KEYS;
-- 批量插入数据
INSERT INTO `test_table` (`data`) VALUES
('Sample data'),
('Sample data'),
...
('Sample data'); -- 每次插入适当数量的行
-- 重新启用索引
ALTER TABLE `test_table` ENABLE KEYS;
-- 提交事务
COMMIT;
-- 重新启用自动提交
SET autocommit=1;
注意:在实际操作中,应该根据服务器的硬件和MySQL的配置来调整上述参数,以达到最佳性能。
评论已关闭