【发布时间】:2014-07-26 23:06:27
【问题描述】:
我想我知道问题出在哪里,但我需要一些帮助才能朝着正确的方向前进。
我有一个“产品”表,还有几个用于不同供应商的 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
-和-
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()
这是我的表格的结构:
临时产品
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'。
感谢您的帮助!
编辑:稍微缩小了问题,最初有一个产品和供应商产品表要更新,一旦我让产品表工作,我可能可以从那里得到它。
【问题讨论】:
标签: mysql sql csv large-data