数据库插入效率太低,怎么优化?

dengshangkun 2008-05-09 02:54:00
创建表
CREATE TABLE `t` (
`Id` int NOT NULL default '0',
`String` varchar(20) default NULL,
`datetime` datetime default NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk;

创建存储过程:
CREATE PROCEDURE p ()
BEGIN
DECLARE v INT;
SET v = 0;
WHILE v < 100000 DO
insert into t (id,String,datetime) values (v,'aaa',now());
SET v = v + 1;
END WHILE;
END;

执行存储过程:call p();

50分钟过去了,才插入了3万多条记录。
这是怎么回事呢?那里该优化下?
...全文
166 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
WWWWA 2008-05-09
  • 打赏
  • 举报
回复
将tmp_table_size的空间扩大试试
dengshangkun 2008-05-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 trainee 的回复:]
默认是一条记录一个transaction, 所以比较慢
所以前面
CREATE PROCEDURE p ()
BEGIN
DECLARE v INT;
SET v = 0;
--加transaction
begin transaction;
WHILE v < 100000 DO
insert into t (id,String,datetime) values (v,'aaa',now());
SET v = v + 1;
END WHILE;
commit;
END;

[/Quote]

我的把begin transaction;
改为start transaction才能建立存储过程。

用这个方法,插入10万条数据只花了3.48秒!
谢谢。
trainee 2008-05-09
  • 打赏
  • 举报
回复
默认是一条记录一个transaction, 所以比较慢
所以前面
CREATE PROCEDURE p ()
BEGIN
DECLARE v INT;
SET v = 0;
--加transaction
begin transaction;
WHILE v < 100000 DO
insert into t (id,String,datetime) values (v,'aaa',now());
SET v = v + 1;
END WHILE;
commit;
END;
dengshangkun 2008-05-09
  • 打赏
  • 举报
回复
回WWWWA,插入还是很慢,1秒就几十条记录而已。ID,为自增,按ID建立了索引的情况。
dengshangkun 2008-05-09
  • 打赏
  • 举报
回复
没有,自己机器上的测试服务器,我测试插入3种类型的数据,那我再增加1个int列试试。
WWWWA 2008-05-09
  • 打赏
  • 举报
回复
ID设为自增如何,按ID建立索引,有没有其它用户连接MYSQL?

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧