0

我有一个用“C”编写的应用程序——debian 发行版(使用 libmysqlclient)。我的应用程序正在向数据库中插入大量行(大约 30.000 行/秒,行长 ~ 150 B)。插入会占用大量 CPU,因为客户端(我的应用程序)必须将二进制流(整数、blob)转换为 ASCII 表示形式,以转换为有效的 SQL 插入语句。MySQL 还必须将此值转换为二进制表示形式并将其存储到文件中。

还有我的问题。是否有可能在没有此对话的情况下调用 SQL 插入?我一直在使用经典的 sprintf(在 libc 中实现)。现在,我正在使用优化版本并且没有调用 sprintf (太多的 func 调用)。我以为我会使用 MySQL 准备好的语句,但似乎准备好的语句也可以转换 '?' ASCII 变量。

4

1 回答 1

0

mysql_real_query()

22.8.7.56 mysql_real_query()

int mysql_real_query(MYSQL *mysql, const char *stmt_str, unsigned long length)

显然,类似下面的东西应该可以工作

#define DATA "insert into atable (acolumn) values('zero\000quotes\"\'etc ...')"
if (mysql_real_query(db, DATA, sizeof DATA - 1)) /* error */;
于 2015-01-02T15:01:47.087 回答