创建表
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万多条记录。
这是怎么回事呢?那里该优化下?

解决方案 »

  1.   

    ID设为自增如何,按ID建立索引,有没有其它用户连接MYSQL?
      

  2.   

    没有,自己机器上的测试服务器,我测试插入3种类型的数据,那我再增加1个int列试试。
      

  3.   

    回WWWWA,插入还是很慢,1秒就几十条记录而已。ID,为自增,按ID建立了索引的情况。
      

  4.   

    默认是一条记录一个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;  
      

  5.   


    我的把begin transaction;
    改为start transaction才能建立存储过程。用这个方法,插入10万条数据只花了3.48秒!
    谢谢。
      

  6.   

    将tmp_table_size的空间扩大试试