我有两个名为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查询的速度?
答案 0 :(得分:1)
您可能希望考虑在您的应用程序中使用非常大的数据集更新小型(8K)表的含义。
您无法根据您提供给我们的少量信息来猜测您的业务逻辑。您的UPDATE
查询看起来像是在Stops表中的行中消失,冗余地更新每一行数万次。
通常,在从大型表创建小表时,对大型表的查询是某种摘要查询,包含GROUP BY
或DISTINCT
个关键字。此查询应生成正确的行数以更新较小的表。
答案 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