Mysql CFloop处理非常慢

Mysql CFloop处理非常慢,mysql,coldfusion-9,cfloop,cfspreadsheet,Mysql,Coldfusion 9,Cfloop,Cfspreadsheet,我在自学CF开发,并在学习过程中使用共享的CF托管站点进行测试 我有一个电子表格,包含2500多条数据记录,大约15列。电子表格包含对该应用程序的基础至关重要的数据。它保持脱机状态,并使用cffile定期上载到服务器。上传后,电子表格逐行导入到MySQL表中 问题是它花的时间太长了。例如,它目前正在运行。在过去43分钟内,2500条记录中只有192条被添加到MySQL表中。有没有更有效的方法 如果您查看下面的代码,在cfloop内部,它将运行cfspreadsheet标记,并检索当前行。然后将该

我在自学CF开发,并在学习过程中使用共享的CF托管站点进行测试

我有一个电子表格,包含2500多条数据记录,大约15列。电子表格包含对该应用程序的基础至关重要的数据。它保持脱机状态,并使用cffile定期上载到服务器。上传后,电子表格逐行导入到MySQL表中

问题是它花的时间太长了。例如,它目前正在运行。在过去43分钟内,2500条记录中只有192条被添加到MySQL表中。有没有更有效的方法

如果您查看下面的代码,在cfloop内部,它将运行cfspreadsheet标记,并检索当前行。然后将该行作为CSV数据添加到MySQL表中

关于如何更有效地做到这一点,有什么建议吗


每次迭代都要读取整个XLS文件,只是为了获取一行。只需在循环之前读取一次文件,然后在其行上循环。

Yes'r试图找到一种方法来防止每次循环都打开电子表格,这就解决了它。。。现在快多了

<body bgcolor="#0033FF">
    <cfset filenm = "SitesTest.xlsx">
    <cfset thisPath = GetDirectoryFromPath(ExpandPath("*.*"))>
    <cfset uploaddirectory = "#thisPath#Uploads\">
    <cfset uploadfile = "#uploaddirectory##filenm#">
    <cfset floc = "#uploadfile#">






<!--- --->
<!--- --->
<!--- --->


<!--- Read Spreadsheet Count number of Rows --->

<cfspreadsheet action="read"
                src="#floc#"
                headerrow="1"
                query="SiteSS"
                >

<cfset Records = "#SiteSS.RecordCount#">                
<!--- Get Header Row from Row 1 --->
<cfspreadsheet action="read"
                format="csv"
                name="ColumnHeaderRow"
                src="#floc#"
                headerrow="1"
                rows="1" 
                columns="1-7,15,16,22,23">

<cfset Headeritems = ListLen(ColumnHeaderRow)>

<cfset csvallVar = "">
<cfset CSVSiteData = "">


<cfspreadsheet 
        action = "read" 
        src="#floc#" 
        query="siteinfo" 
        rows="1-#Records#" 
        columns="1-7,15,16,22,23" >



<cfset rowcount = 2>

<cfloop Query="siteinfo" startrow="2" endrow="#Records#" > 

<cfset EntryType = "SiteInfo">

<!--- Create Line Item Lists--->
<cfset CSVSiteData = "#siteinfo.col_1#, #siteinfo.col_2#, #siteinfo.col_3#, #siteinfo.col_4#, #siteinfo.col_5#, #siteinfo.col_6#, #siteinfo.col_7#, #siteinfo.col_8#, #siteinfo.col_9#, #siteinfo.col_10#, #siteinfo.col_11#">

<cfset CSVSiteDataCheck = "#siteinfo.col_1#, #siteinfo.col_2#, #siteinfo.col_3#, #siteinfo.col_4#, #siteinfo.col_5#, #siteinfo.col_6#, #siteinfo.col_7#, #siteinfo.col_8#, #siteinfo.col_9#, #siteinfo.col_10#, #siteinfo.col_11#">

<cfset Manager = #siteinfo.col_1#>
<cfset Market = #siteinfo.col_2#>
<cfset FALocationCode = #siteinfo.col_3#>
<cfset USID = #siteinfo.col_4#>
<cfset CommonID = #siteinfo.col_5#>
<cfset EquipmentName = #siteinfo.col_6#>
<cfset EquipmentType = #siteinfo.col_7#>
<cfset PrimaryTech = #siteinfo.col_8#>
<cfset Address = #siteinfo.col_9#>
<cfset LatitudeDecimal = #siteinfo.col_10#>
<cfset LongitudeDecimal = #siteinfo.col_11#>



<!------>

<cfquery name="CheckDup" datasource="TechData">
    select CSVSiteData From sitelist2
    where CSVSiteData = '#CSVSiteDataCheck#'
</cfquery>


<cfif CheckDup.recordcount lt 1>

<cfquery name="Insertsite" datasource="TechData">
    INSERT INTO sitelist2 (
                            EntryType, 
                            CSVSiteData,
                            Manager, 
                            Market, 
                            FALocationCode, 
                            USID, 
                            CommonID, 
                            EquipmentName, 
                            EquipmentType, 
                            PrimaryTech, 
                            Address, 
                            LatitudeDecimal, 
                            LongitudeDecimal                            
                            )
    VALUES (
            '#EntryType#', 
            '#CSVSiteData#', 
            '#Manager#', 
            '#Market#', 
            '#FALocationCode#', 
            '#USID#', 
            '#CommonID#', 
            '#EquipmentName#', 
            '#EquipmentType#', 
            '#PrimaryTech#', 
            '#Address#', 
            #LatitudeDecimal#, 
            #LongitudeDecimal#
            )
</cfquery>



"Record <cfoutput>#rowcount#</cfoutput> added"<br />
<cfelse>
"Record <cfoutput>#rowcount#</cfoutput> not added"<br />
</cfif>




<cfset rowcount = rowcount + 1>
</cfloop>






</body>

关键的应用程序的基础,然后你可以考虑使用不同的方法,因为上面它易碎。使用加载数据插入工作表将更快,并提供对导入过程的更好控制。另外,请始终将cfqueryparam与查询参数一起使用。除了防止sql注入之外,它还有助于在多次执行同一查询时提高性能?存储分隔数据几乎从来都不是一个好方法。
<body bgcolor="#0033FF">
    <cfset filenm = "SitesTest.xlsx">
    <cfset thisPath = GetDirectoryFromPath(ExpandPath("*.*"))>
    <cfset uploaddirectory = "#thisPath#Uploads\">
    <cfset uploadfile = "#uploaddirectory##filenm#">
    <cfset floc = "#uploadfile#">






<!--- --->
<!--- --->
<!--- --->


<!--- Read Spreadsheet Count number of Rows --->

<cfspreadsheet action="read"
                src="#floc#"
                headerrow="1"
                query="SiteSS"
                >

<cfset Records = "#SiteSS.RecordCount#">                
<!--- Get Header Row from Row 1 --->
<cfspreadsheet action="read"
                format="csv"
                name="ColumnHeaderRow"
                src="#floc#"
                headerrow="1"
                rows="1" 
                columns="1-7,15,16,22,23">

<cfset Headeritems = ListLen(ColumnHeaderRow)>

<cfset csvallVar = "">
<cfset CSVSiteData = "">


<cfspreadsheet 
        action = "read" 
        src="#floc#" 
        query="siteinfo" 
        rows="1-#Records#" 
        columns="1-7,15,16,22,23" >



<cfset rowcount = 2>

<cfloop Query="siteinfo" startrow="2" endrow="#Records#" > 

<cfset EntryType = "SiteInfo">

<!--- Create Line Item Lists--->
<cfset CSVSiteData = "#siteinfo.col_1#, #siteinfo.col_2#, #siteinfo.col_3#, #siteinfo.col_4#, #siteinfo.col_5#, #siteinfo.col_6#, #siteinfo.col_7#, #siteinfo.col_8#, #siteinfo.col_9#, #siteinfo.col_10#, #siteinfo.col_11#">

<cfset CSVSiteDataCheck = "#siteinfo.col_1#, #siteinfo.col_2#, #siteinfo.col_3#, #siteinfo.col_4#, #siteinfo.col_5#, #siteinfo.col_6#, #siteinfo.col_7#, #siteinfo.col_8#, #siteinfo.col_9#, #siteinfo.col_10#, #siteinfo.col_11#">

<cfset Manager = #siteinfo.col_1#>
<cfset Market = #siteinfo.col_2#>
<cfset FALocationCode = #siteinfo.col_3#>
<cfset USID = #siteinfo.col_4#>
<cfset CommonID = #siteinfo.col_5#>
<cfset EquipmentName = #siteinfo.col_6#>
<cfset EquipmentType = #siteinfo.col_7#>
<cfset PrimaryTech = #siteinfo.col_8#>
<cfset Address = #siteinfo.col_9#>
<cfset LatitudeDecimal = #siteinfo.col_10#>
<cfset LongitudeDecimal = #siteinfo.col_11#>



<!------>

<cfquery name="CheckDup" datasource="TechData">
    select CSVSiteData From sitelist2
    where CSVSiteData = '#CSVSiteDataCheck#'
</cfquery>


<cfif CheckDup.recordcount lt 1>

<cfquery name="Insertsite" datasource="TechData">
    INSERT INTO sitelist2 (
                            EntryType, 
                            CSVSiteData,
                            Manager, 
                            Market, 
                            FALocationCode, 
                            USID, 
                            CommonID, 
                            EquipmentName, 
                            EquipmentType, 
                            PrimaryTech, 
                            Address, 
                            LatitudeDecimal, 
                            LongitudeDecimal                            
                            )
    VALUES (
            '#EntryType#', 
            '#CSVSiteData#', 
            '#Manager#', 
            '#Market#', 
            '#FALocationCode#', 
            '#USID#', 
            '#CommonID#', 
            '#EquipmentName#', 
            '#EquipmentType#', 
            '#PrimaryTech#', 
            '#Address#', 
            #LatitudeDecimal#, 
            #LongitudeDecimal#
            )
</cfquery>



"Record <cfoutput>#rowcount#</cfoutput> added"<br />
<cfelse>
"Record <cfoutput>#rowcount#</cfoutput> not added"<br />
</cfif>




<cfset rowcount = rowcount + 1>
</cfloop>






</body>