【发布时间】:2016-09-09 19:06:04
【问题描述】:
我正在做一个项目,我必须更新两个不同表中的字段。首先,我使用 .csv 文件读取某些字段的值,然后检查 if 语句中的值,然后进行更新。以前在旧代码中这很容易,因为我只有一个表和一个字段要更新,现在我有两个不同的表和两个字段。仅进行更新很容易,但我有超过 15,000 条记录。我想知道最有效的方法是什么?如果我放置两个单独的查询并运行两次更新,则将运行近 3 万条记录。有没有办法一次做到这一点?如果不是,运行这些更新的最佳方法是什么?这是我用来在 ColdFusion 服务器上运行更新的代码:
<cfset updateFile = "C:\MyFiles\Records.csv">
<cffile action="read" file="#updateFile#" variable="recordsFile">
<cfset myarray = ListToArray(recordsFile, chr(13))>
<cfset cnt = ArrayLen(myarray)>
<cfloop index="i" from="1" to=#(cnt)# step="1">
<cfif len(trim(myarray[i])) GT 0>
<cfset myrow = #replace(myarray[i],chr(10),'')#>
<cfset myrow = ListToArray(myrow,",",true)>
<cfif #myrow[23]# EQ '1'>
<cfset #myrow[23]# = 'A'>
</cfif>
<cfif #myrow[23]# EQ '2'>
<cfset #myrow[23]# = 'B'>
</cfif>
<cfif #myrow[23]# EQ '3'>
<cfset #myrow[23]# = 'D'>
</cfif>
<cfquery name="UpdateRecords" datasource="test">
Update Users
Set FiledCode = '#myrow[23]#'
Where User_Number = #myrow[1]#
</cfquery>
<cfoutput>#myrow[1]#</cfoutput><br>
</cfif>
</cfloop>
您可以在上面看到我的旧代码的外观,现在我必须再添加一个表并在该表中更新文件,但仍然从同一文件(Records.csv)中读取数组中不同位置的信息。我之前做过更新/插入,但从来没有大量的记录。现在我必须要什么来提高效率并找到最好的方法。如果您对此问题有任何建议,请告诉我。谢谢你。
【问题讨论】:
-
尽量减少使用 ColdFusion 进行数据处理。另外,使用临时表。如果 MySQL 有批量加载程序,请使用它来填充临时表。如果没有,请使用 ColdFusion。然后从临时表更新其他表。
-
@DanBracuk 我从不使用批量加载程序。你能提供任何例子来回答你的问题吗?谢谢。
-
我根本不使用 MySQL,这就是为什么我说“如果 MySQL 有批量加载器”。从一个表写入另一个表的语法可在 Internet 上找到。这取决于您是在执行插入、删除还是更新。
标签: mysql sql csv coldfusion sql-update