gpt4 book ai didi

mysql - 对 SQL 表的许多非常相似的更新 - 优化?

转载 作者:太空宇宙 更新时间:2023-11-04 08:35:00 24 4
gpt4 key购买 nike

我有一个如下所示的 C 函数,它从其他地方获取连接,并在特定表中执行(可能非常大)数量(非常相似)的插入。此代码还包括 glib.hmy_global.hassert.hmysql.h(但是在这里不相关)。代码如下:

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 行)时,它永远结束了。根据我的分析,这个函数是瓶颈,我猜所有那些 ADD_ROW_CMD 都是问题所在。考虑到行的内在相似性,有什么方法可以优化它吗?

免责声明:我是一个完全的 SQL 菜鸟。

最佳答案

你可以像这样抓取一个记录 block 插入一次:

insert into graph (weight) values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);

根据您必须插入的记录数,您可以使用每个查询处理 1000(例如)条记录,而不是构建查询 -> 插入 -> 确认 -> 重复;

关于mysql - 对 SQL 表的许多非常相似的更新 - 优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26646407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com