0

我有两张表,分别称为 Stops 和 Stop_Times,它们与旅行社有关。停止有 8K 记录和 Stop_Times 表有 320 万条记录。当我执行 UPDATE 查询时,它需要太多时间。花了 3.5-4 小时,但仍然没有更新记录。我的查询是 -

UPDATE Stops
   JOIN Stop_Times ON Stops.stop_id = Stop_Times.stop_id
SET
   Stops.route_type = Stop_Times.route_type,
   Stops.agency_id = Stop_Times.agency_id
WHERE Stops.location_type = 0

对于这两个表,我使用的是 MyISAM 存储引擎。我为 Stops 和 Stop_Times 表编制了索引。

我在 Linux CentOs 上运行这个查询。

有什么办法可以提高 UPDATE 查询的速度?

4

2 回答 2

1

您可能希望仔细考虑在您的应用程序中更新具有非常大数据集的小型 (8K) 表意味着什么。

从您提供给我们的少量信息中无法猜测您的业务逻辑。您的UPDATE查询看起来像是在敲击 Stops 表中的行,冗余地更新每一行数万次。

通常,当从大表创建小表时,对大表的查询是某种摘要查询,包含GROUP BYDISTINCT关键字。此查询应生成正确的行数以更新较小的表。

于 2012-05-30T12:12:32.437 回答
0

您可以尝试以下查询 -

UPDATE
Stops AS s
LEFT JOIN (
    SELECT
        route_type, agency_id, stop_id
    FROM
        Stop_Times
    GROUP BY
        stop_id
) AS st ON
    st.stop_id = s.stop_id
SET s.route_type = st.route_type, s.agency_id = st.agency_id
于 2012-10-31T12:12:43.987 回答