我在一个数据库中有两个表,大约有 50,000 到 70,000 行。两者都是MyISAM。第一个是yahooprices,包含商品的SKU代码(列代码)和定价(列价格)。第二个表(combined_stock)包含部件号(与代码相同的信息,但排序方式不同)、价格、数量和描述。价格目前定义为 FLOAT 10,2 并设置为 0.00。我试图使用以下语句将定价从雅虎价格(也是 FLOAT 10,2)拉到combined_stock:
UPDATE combined_stock dest LEFT JOIN (
SELECT price, code FROM yahooprices
) src ON dest.partnumber = src.code
SET dest.price = src.price
我知道这个说法有效,因为我在较小的测试量上尝试过。它们将部分号和代码作为非唯一索引。我还尝试在两个表上索引价格,看看这是否会加快查询速度。从技术上讲,它应该在几秒钟内完成,但上次我尝试运行它时,它在那里坐了一夜,即便如此,我也很确定它没有成功。 有人有任何故障排除建议吗?
我会建议一些相对较小的更改。 首先,删除子查询。 其次,切换到内部联接:
UPDATE combined_stock dest JOIN
yahooprices src
ON dest.partnumber = src.code
SET dest.price = src.price;
最后在 yahooprices(code, price)
上创建一个索引。
如果您真的希望在没有匹配时将价格设置为NULL
,则可以离开left outer join
。