如何使用c ++

时间:2016-08-08 08:33:03

标签: c++ mysql

我有一个用c ++编写的应用程序,它运行不同的线程。一个线程负责连续填充具有数百万行的MYSQL数据库表。我需要优化这个线程,以便它在最短的时间内插入数据,以避免减慢其他线程。

这是我要填充的表格,

create table Frames
(
id int unsigned auto_increment primary key,
f1 varchar(8) not null , 
f2 varchar(6) not null , 
f3 varchar(6) not null , 
f4 varchar(2) not null ,
f5 varchar(4),
f6 varchar(16000),
f7 varchar(4) not null
);

以下是我用来填充它的代码

#define MAX 8000

MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
char *server = "machine-name";
char *user = "root";
char *password = "";
char *database = "db_name";
conn = mysql_init(NULL);
// Connect to database 
if (!mysql_real_connect(conn, server,
     user, password, database, 0, NULL, 0)) {
  fprintf(stderr, "%s\n", mysql_error(conn));
  return(1);  
}

char rowentry[1000];
for (int c = 0; c < 125; ++c)
{
  stringstream query; 
  query << "insert into Frames (f1,f2,f3,f4,f5,f6,f7) values";
  for (int i = 1; i <= MAX; ++i)
  {
     sprintf ( rowentry, "('AAAAAAAA','000001','000002','05','5005','00000000010000000001000000000100000000010000000001','MKJE')");
     query << rowentry;
     if(i==MAX)
        query << ";";
     else
        query << ",";
  }
  if (mysql_query(conn, query.str().c_str() )) {
     fprintf(stderr, "%s\n", mysql_error(conn));
     return(1);
  }
} 
mysql_close(conn);

在上面的代码中,我使用MYISAM作为我桌子的存储引擎。 然后,我使用125个插入语句填充100万行。 每个语句一次插入8000行。 完成此任务大约需要7秒钟,这在我的应用程序中非常长。 我还尝试了InnoDB存储引擎,它让我有20秒的时间来完成这项任务。

我可以在很短的时间内(约1-2秒)获得一个解决方案,让这100万行插入数据库吗?

感谢大家的帮助。

0 个答案:

没有答案