2014-04-17 73 views
0

我想修改一個包含3個表插入,一個表更新和一個刪除過程的cron腳本。 有成千上萬條記錄,因此插入數據需要很長時間。MySQL插入和更新優化

將數據插入產品表,產品付款表,產品明細表和產品圖片表中。

當前腳本檢查產品是否存在。 如果不存在,則先將數據插入產品表並返回新插入的產品ID。之後,插入發生在其他三張桌子上。圖像表中可能有多個插入(取決於圖像的數量)。

如果產品已經存在,請更新表格。對於圖像表,該腳本刪除該特定產品的現有圖像記錄,然後將所有圖像作爲新圖像插入到圖像表中。

這就是現在發生的事情:

if(!$prod_exists){ 
    $product_id = insert_product($product_data) ; 
    if($product_id){ 
    insert_payment($paymnt_data, $product_id); 
    insert_details($details_data, $product_id); 
    insert_images($image_data, $product_id); 
    } 
}else{ 
    update_product($product_data, $product_id) 
    update_payment($paymnt_data, $product_id); 
    update_details($details_data, $product_id); 
    delete_images($product_id); 
    insert_images($image_data, $product_id); 
} 

由於數據是巨大的,它需要更長的時間來執行時間。有什麼方法可以優化整個過程嗎?

感謝 中號

+0

取決於您所做的更改,您可能可以通過執行INSERT INTO ..... ON DUPLICATE KEY UPDATE處理逃脫。這樣,你可以插入一個記錄,如果新的,如果沒有更新它。最重要的是,使用INSERT,您可以在一條SQL語句上處理數百條記錄,這可以大大減少所需的語句數量。 – Kickstart

回答

0

另一種處理大量數據的方法是創建一個臨時表(可能使用ENGINE = MEMORY)並對該表執行批量插入操作。因此,不是一次添加一個數據集,而是使用多個集創建SQL插入並一次添加它們。 這比循環遍歷元素更快,併爲每個數據集調用插入。

之後,您可以通過將原始表與該臨時表連接起來進行批量更新,因爲這也更快。

我們正在使用這個概念來加速插入/更新。