MySQL声明异常长

时间:2014-02-24 13:53:39

标签: sql indexing timeout sql-update

我在一个数据库中有两个表,大约有50,000到70,000行。两者都是MyISAM。第一个是yahooprices,包含商品和定价的SKU代码(列代码)(列价)。第二个表combined_stock包含partnumber(与代码相同的信息,但排序方式不同),价格,数量和描述。价格目前定义为FLOAT 10,2并设置为0.00。我试图通过这个声明将价格从yahooprices(也是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

我知道这个说法有效,因为我试用了较小的测试数量。它们具有partnumber和code作为非唯一索引。我也尝试在两个表上编制索引价格,看看是否会加快查询速度。从技术上讲,它应该在几秒钟内完成,但上次我尝试运行它,它一夜之间坐在那里,即便如此我很确定它没有成功。有人有任何疑难解答建议吗?

1 个答案:

答案 0 :(得分:0)

我会建议一些相对较小的变化。首先,摆脱子查询。其次,切换到内部联接:

UPDATE combined_stock dest JOIN
      yahooprices src
      ON dest.partnumber = src.code
  SET dest.price = src.price;

最后在yahooprices(code, price)上创建一个索引。

如果您确实希望在没有匹配时将价格设置为left outer join,则可以退出NULL

相关问题