MySQL Update Query花费了太多时间

时间:2012-05-30 11:35:35

标签: mysql

我有两个名为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查询的速度?

2 个答案:

答案 0 :(得分:1)

您可能希望考虑在您的应用程序中使用非常大的数据集更新小型(8K)表的含义。

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

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

答案 1 :(得分: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