我有两张表,分别叫Stops和Stop_Times,它们与旅行社有关。停止具有8K条记录和具有320万条记录的Stop_Times表。当我执行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存储引擎。我有索引站和Stop_Times表。
我在Linux CentOs上运行这个查询。
有没有办法提高更新查询的速度?
发布于 2012-10-31 20:12:44
您可以尝试执行以下查询:
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-05-30 20:12:32
您可能希望考虑在您的应用程序中使用非常大的数据集更新一个小的(8K)表意味着什么。
从您提供给我们的少量信息中无法猜测您的业务逻辑。您的UPDATE查询看起来就像是在Stops表中挖掘行,对每个行冗余地更新数万次。
通常,当从大型表创建小型表时,大型表上的查询是某种类型的摘要查询,包含GROUP BY或DISTINCT关键字。此查询应生成用于更新较小表的正确行数。
https://stackoverflow.com/questions/10815502
复制相似问题