sql - 在 SQL 中更新大量列

标签 sql c sql-update odbc

在云上的数据库中,我有一个大约一万列的表。我将每隔几分钟用一些本地数据更新它,这些数据是本地代码的输出(位于 my_col_val[] 下方)。我的问题是:

1- 更新每一行的最佳且最快的方法是什么? (For 循环?)

2- 当 SQL 查询包含大小为 1MB 的 SQL 查询时,使用 char 指针保存 SQL 查询 (szSQL[]) 是最好的方法吗?

我的代码(C 语言)现在大致如下:

char * szSQL[?];// (What is the best size?)
char * my_col [?];
char * my_col_val[?]; 
SQLHSTMT    hStmt = NULL;

sprintf(szSQL, "UPDATE my_table SET %s='%s',...,%s='%s'\ // there should be 8000 %s='%s' statements
 WHERE ID = my_ID FROM my_table", my_col[0], my_col_val[0], ..., my_col[n], my_col_val[n]); //wher n=8000
SQLExecDirect(hstm, szSQL, SQL_NTS);

最佳答案

我喜欢@Takarii 使用三个表的解决方案。最佳策略涉及 1) 如何插入新的测量行以及 2) 它将用于什么。后者特别令人感兴趣,因为它可能需要额外的索引,并且这些索引必须在执行插入语句时由数据库维护。需要的索引越少,插入速度就越快。例如,虽然三个表之间存在关系,但测量表无法与其他表声明其外键,从而减少了该索引的开销。

随着表不断增长,数据库会变得越来越慢。然后,为每天的测量创建一个新表会很有帮助。

由于传感器数据的类型不同,数据可以作为字符串数据插入,并且只能由检索器程序解析。

另一个帮助可能是,如果仅定期检索记录的数据,则可以将测量结果写入平面文件并定期(假设每小时一次)批量插入。

也许这些想法会有帮助。

关于sql - 在 SQL 中更新大量列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33341913/

相关文章:

c - If 语句使用 | 输出运算符(operator)

c++ - 需要使用 Makefile 编译包含 C++ 和 C 代码的程序

php - MySQL 使用 PHP 将 DATETIME 更新为 NOW()

mysql - 更新两个表之一中存在的行的值

sql - 在 SQL Server 2012 中根据 row_number 更新行

mysql - 简单选择组通过使用文件排序和临时,而不是索引

php - 如果两个表中都没有任何行,如何不获取任何行?

c - 从C中的二进制文件读取一行 float

php - ENUM 复选框更新数据库

mysql - SQL 将单词实例替换为另一个单词实例