我用C语言把很多数据一条一条写进数据库速度太慢了,有没有什么方法可以快点啊,用的数据库是Mysql,300万条数据,一条一条insert,我等了十分钟只插进去10万条。我写的语句如下:
sprintf(szSqlText,"insert into table1 (number,word1,word2,num) values(%d,%d,%d,1)",pt,a[0],a[1]);
mysql_query(&connect, szSqlText);
就是先给字符串赋值,然后插入数据库,一条一条写300万次,我等了10分钟才插入了5万条,请问各位有没有快的方法,我这样插数据是不是会产生很多不必要的损耗。

解决方案 »

  1.   

    没什么可优化的了,最多是检查一下索引,把索引去掉会快一些。
    另外可以把数据写入到文本文件,然后用load data infile来一次性加载。 load data  的速度远比INSERT快很多。有些测试结果显示可以快20倍。
      

  2.   

    修改一下key_buffer_size会有点用的
      

  3.   

    1.换innodb引擎
    2.批量insert
    3.去不必要的index
      

  4.   

    一楼ACMAIN_CHM说的没错,慢的话,就用程序把数据写到文本中,再用load data infile "目录/文件名" into table 表名 fields terminated by '分隔符'
    把300万数据用load到表中,是小意思。
      

  5.   

    #insert
    bulk_insert_buffer_size = 64M
    concurrent_insert = 2
    delayed_queue_size = 3000
    delayed_insert_limit = 200
    delayed_insert_timeout = 400
    max_delayed_threads = 30sprintf(szSqlText,"insert delayed into table1 (number,word1,word2,num) values(%d,%d,%d,1)",pt,a[0],a[1]); 试试,这样应该会好点!
      

  6.   

    用load data infile是最快的。
    INSERT INTO `Table` VALUES (X,X),(X,X),...(X,X');的方式比你所用的方法要快一些。
      

  7.   

    load data infile数据库操作肯定最快了,批操作应该也行。
      

  8.   

    用load data infile是最快的,那生成文本快不快呢