2014-01-20 2 views
0

두 개의 데이터베이스 (하나의 MS SQL과 하나의 MYSQL)에서 데이터를 실행하고 비교하는 몇 가지 Coldfusion 쿼리가있어 instore 데이터베이스에서 Webshop의 가격을 업데이트하는 작업을 수행합니다.Coldfusion SQL 쿼리가 매우 느립니다.

문제는이 쿼리가 완료되는 데 4 분 이상이 소요된다는 것입니다. 속도를 높이거나 호스트의 제한 사항에 직면하게됩니까?

쿼리 - : 코멘트에 관한

<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> 
+0

왜 모든 코드를 게시 하시겠습니까? – Mihai

+0

유용 할 것 같아서 죄송합니다. – matthew

+0

쿼리 게시 및 계획 – Mihai

답변

2

나는이 제안, "? 어떻게 당신이 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> 

그런 다음 이러한 결과를 반복하고 수행해야 할 작업을 수행 할 수 있습니다. 그것은 데이터베이스에 단 한 번의 여행입니다.

관련 문제