我有一個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