我有一个C函数,如下所示,它从别处获取连接,并执行(可能非常大)数量(非常相似)的插入到特定表中。此代码还包括glib.h
,my_global.h
,assert.h
和mysql.h
(但在此不重要)。代码如下:许多与SQL表非常相似的更新 - 优化?
char* MAKE_TABLE_CMD = "CREATE OR REPLACE TABLE graph (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, weight INT NOT NULL);";
char* ADD_ROW_CMD = "INSERT INTO graph (weight) VALUES (0);";
gboolean graph_make (MYSQL* conn_ptr, guint64 size) {
assert(conn_ptr);
if (!mysql_query(conn_ptr, MAKE_TABLE_CMD)) {
gboolean loop_successful = TRUE;
for (guint64 i = 0; i < size; i++) {
if (mysql_query(conn_ptr, ADD_ROW_CMD)) {
loop_successful = FALSE;
break;
}
}
return loop_successful;
} else {
return FALSE;
}
}
当我试图与足够甚至远程大的值使用一个数据库表(10,000行)来保证,它采取的永远到此结束。根据我的分析,这个功能是瓶颈,我猜所有这些都是问题所在。考虑到行的固有相似性,有什么办法可以优化它吗?
声明:我是一个完整的SQL noob。
你和Wranorn的方法可以结合吗? – 2014-10-30 07:56:03
是的,他们可以,但是如果您已经将您的查询修改为像Wranorn建议的那样,结果将不会很重要;因为你只有一个插入语句。 – 2014-10-30 07:58:50