mysql - Coldfusion SQL 查询速度非常慢

标签 mysql sql-server coldfusion

我们有一些 Coldfusion 查询,用于运行和比较两个数据库(一个 MS SQL 和一个 MYSQL)中的数据,以执行从店内数据库更新网上商店价格的任务。

问题是此查询需要四分钟以上才能完成。我们是否可以简化此查询以加快速度,或者我们是否面临主机的限制?

查询-:

<cfsetting requestTimeOut = "1440">

<cftry>
    <cfset request.timing = structNew()>

    <cfset getOffline = getTickCount()>
    <cfquery datasource="MSSQLDATABSE" name="get_offlineproduct2" timeout="240"> 
        SELECT p.id, p.code, pl.salesPrice3
        FROM products p with(nolock)
            INNER JOIN productposlocations pl with(nolock)
                ON pl.ProductID = p.ID
        WHERE pl.posLocationID = 1
    </cfquery>
    <cfset request.timing.getOffline = (getTickCount() - getOffline)/1000>

<cfquery datasource="MYSQLDATABASE" name="get_onlineproducts" timeout="240">
        SELECT s.SKU_ID, s.SKU_MerchSKUID, s.SKU_Price, s.SKU_ShowWeb, b.brand_Name
        FROM tbl_skus AS s
        INNER JOIN tbl_prdtbrand_rel r
        ON s.SKU_ProductID = r.prdt_brand_rel_Product_ID
        INNER JOIN tbl_prdtbrands b
        ON r.prdt_brand_rel_Brand_ID = b.brand_ID
        ORDER BY b.brand_Name
    </cfquery>

    <cfquery name="qPriceCheck" dbtype="query">
        SELECT *
        FROM get_onlineproducts, get_offlineproduct2
        WHERE SKU_MerchSKUID = code
            AND SKU_Price <> salesPrice3
    </cfquery>

    <table border="1" cellspacing="2" cellpadding="2">
        <tr>
            <th>SKU ID</th>
            <th>Brand</th>
            <th>SKU Merchant ID</th>
            <th>SKU Price</th>
            <th>Stock Price</th>
            <th>Price Updated?</th>
        </tr>
        <cfoutput query="get_onlineproducts">
            <cfquery name="qPC" dbtype="query">
                SELECT *
                FROM get_offlineproduct2
                WHERE code = '#get_onlineproducts.SKU_MerchSKUID#'
            </cfquery>
            <tr>
                <td>#get_onlineproducts.SKU_ID#</td>
                <td>#get_onlineproducts.brand_Name#</td>
                <td>#get_onlineproducts.SKU_MerchSKUID#</td>
                <td>#get_onlineproducts.SKU_Price#</td>
                <cfif qPC.recordCount>
                    <td>#qPC.salesPrice3#</td>
                    <cfif qPC.salesPrice3 neq get_onlineproducts.SKU_Price>
                        <td>Yes</td>
                        <cfquery datasource="MYSQLDATABASE" name="UpdateonlineproductsPrices">
                            UPDATE tbl_skus
                            SET SKU_Price = '#qPC.SalesPrice3#'
                            WHERE SKU_MerchSKUID = '#get_onlineproducts.SKU_MerchSKUID#'
                        </cfquery>
                    </cfif> 
                </cfif>
            </tr>
        </cfoutput>
    </table>

    <cfset request.timing.totalTime = (getTickCount() - getOffline)/1000>
    <cfdump var="#request.timing#">

<cfcatch type="Any" >
    <cfdump var="#cfcatch#" label="cfcatch">
</cfcatch>
</cftry>

最佳答案

关于评论“您建议如何从 cfoutput 中删除查询?我不确定执行此操作的最佳方法”,我建议如下:

<cfquery name="qPC" dbtype="query">
SELECT field1, field2, etc
 FROM get_offlineproduct2
 WHERE code in ( <cfqueryparam 
value = #ValueList(get_onlineproducts.SKU_MerchSKUID)# list="yes" )
 </cfquery>

然后您可以循环访问这些结果并执行您需要执行的操作。只需访问数据库 1 次。

关于mysql - Coldfusion SQL 查询速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21231288/

相关文章:

c# - 调用MySql Table时自定义DataGridview宽度

python - 将 python 日期时间与 mysql 日期时间进行比较

asp.net - 如何使用 Asp.Net 从 Sql 数据库获取最后创建的条目的 ID

sql - 如何仅从查询中提取显示所需的记录?

MySql Date_sub 和 DATEDIFF 不适用于整数字段中的时间戳 time()

mysql - 配置 Amazon MySQL RDS 以进行 30GB 数据库备份文件恢复

sql - 如何使左外连接成为任何 sql 表的 UD 函数?

sql-server - 尝试删除数据库用户帐户架构时出错

coldfusion - 在 Coldfusion cfc 中,在函数外部设置的变量的范围名称是什么?

javascript - 如何根据开始和结束时间值创建动态表?