2014-06-05 26 views
1

我想我知道問題是什麼,但我需要一些幫助才能朝着正確的方向前進。更新沒有任何鍵/索引信息的大型MySQL表格

我有一個表'產品',我也有幾個temp_product表爲各種供應商。

這裏的目標是從適當的temp_product表中更新products表中的幾個字段。我的產品供應商爲我提供了一份包含所有庫存數據的CSV文件。最初我只是循環遍歷CSV並逐行更新,但這需要永遠,所以現在我使用LOAD DATA LOCAL INFILE將它加載到臨時表中。

我遇到的問題是UPDATE查詢需要永久運行,而且大部分時間MySQL只是完全崩潰。我希望能向你展示我的表格結構,有人可以幫我解決什麼樣的鍵/索引設置最適合?

我試過2個不同的更新查詢變化,但都沒有工作。

UPDATE product AS p, temp_product AS t 
    SET p.quantity = t.quantity, 
     p.ean = t.inventory, 
     p.cost = t.price, 
     p.date_modified = NOW() 
    WHERE p.sku = t.sku 

-AND-

UPDATE temp_product AS t 
    INNER JOIN product AS p ON p.sku = t.sku 
    SET p.quantity = t.quantity, 
     p.ean = t.inventory, 
     p.cost = t.price, 
     p.date_modified = NOW() 

這裏的結構,我的表中的問題:

temp_product

sku varchar(15) PRI 
status varchar(2) 
statusid int(11) 
quantity int(11) 
inventory varchar(15) 
ETA varchar(25) 
ETA_Note varchar(255) 
price double(10,2) 

產品

product_id int(11) PRI 
model varchar(64) 
sku varchar(64) 
upc varchar(50) 
ean varchar(50) 
mpn varchar(64) 
location varchar(128) 
quantity int(4) 
price decimal(15,4) 
cost decimal(15,4) 
status tinyint(1) 
date_added datetime 
date_modified datetime 

我有一種感覺,我可以得到這個正常工作,如果我有正確的鍵/指標設置。我現在唯一設置的是主鍵,但是這些鍵在所有表中都不匹配。我對這一切都很陌生,所以任何幫助,將不勝感激。

爲了使事情更加複雜,我不確定是否有一些供應商使用相同的SKU,所以我想更新產品表WHERE sku = sku和location ='suppliername'。

感謝您的幫助!

編輯:減少了一點點的問題,最初有一個產品和supplier_product表更新,一旦我得到產品表工作,我可以從那裏拿它。

回答

0

首先,你可以運行SHOW CREATE TABLE product;SHOW CREATE TABLE temp_product;並粘貼結果嗎?另外,您的產品表格有多大? (select count(1) from products可以幫忙)

關於鑰匙:您至少需要在您的product表中添加sku鑰匙。

如果sku應該是一個獨特的領域,那麼你可以用下面的命令做到這一點:

ALTER TABLE product ADD UNIQUE KEY sku(sku); 

如果sku不是一個獨特的領域,那麼你仍然可以將其添加爲一個這樣的關鍵:

ALTER TABLE product ADD KEY sku(sku); 

,但在這種情況下,這意味着對於從temp_product表partcular sku一個記錄,您將更新您product表中多條記錄。

關於表大小:即使表很大(例如幾百萬行),但運行需要大量時間的查詢(例如,如果您是唯一使用此數據庫的)你已經添加了密鑰,其中任何一個變體都應該在原則上工作,並且比現在花費的時間少。否則,在批量更新(例如,一次處理100,500或1000條記錄)時,最好使用某些腳本,這些腳本甚至可能會在更新之間等待一段時間。如果您的數據庫是複製到從服務器的主數據庫,那麼這是特別推薦的。

+0

感謝您的幫助,這是我需要的答案。我其實只是想出了它,刷新了頁面,並看到了你的迴應。我的解決方案是在我的所有表格的SKU字段中添加索引(就像密鑰一樣)。查詢從30分鐘過去了幾秒鐘。 – user3712685

+0

歡迎您,成功與您的工作:) – Ashalynd