【问题标题】:MySQL statement taking abnormally longMySQL 语句花费异常长
【发布时间】:2014-02-24 13:53:39
【问题描述】:

我在一个数据库中有两个表,大约有 50,000 到 70,000 行。两者都是 MyISAM。第一个是 yahooprices,包含商品的 SKU 代码(列代码)和定价(列价格)。第二个表combined_stock 包含零件编号(与代码相同的信息,但排序不同)、价格、数量和描述。价格当前定义为 FLOAT 10,2 并设置为 0.00。我正在尝试使用以下语句将价格从 yahooprices(也是 FLOAT 10,2)拉到 combine_stock:

UPDATE combined_stock dest LEFT JOIN (
SELECT price, code FROM yahooprices
) src ON dest.partnumber = src.code
SET dest.price = src.price

我知道此语句有效,因为我在较小的测试量上进行了尝试。它们具有零件号和代码作为非唯一索引。我还尝试在两个表上建立索引价格,看看这是否会加快查询速度。从技术上讲,它应该在几秒钟内完成,但上次我尝试运行它时,它在一夜之间坐在那里,即使这样我也很确定它没有成功。有人有任何故障排除建议吗?

【问题讨论】:

  • 共享数据结构,特别是每个表的相关列。数据类型、索引(和类型)等
  • 你为什么要做左连接?更重要的是,为什么要将同一条数据存储在两个地方?

标签: sql indexing timeout sql-update


【解决方案1】:

我会建议一些相对较小的更改。首先,摆脱子查询。二、切换到内连接:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多