在云上的数据库中,我有一个大约一万列的表。我将每隔几分钟用一些本地数据更新它,这些数据是本地代码的输出(位于 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/