2012-05-30 118 views
0

我有两个表称为停止和Stop_Times,这些都与旅行社有关。 停止拥有8K条记录和Stop_Times表,其中有320万条记录。 当我执行UPDATE查询时,需要太多时间。花了3.5-4小时,但还没有更新记录。我的查询是 -MySQL更新查询花费太多时间

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存储引擎。我hv索引停止和Stop_Times表。

我在Linux CentOs上运行此查询。

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

+0

你确定你是互相比较的列具有完全相同的类型? –

+0

“Stop_Times.stop_id”是一个唯一的列吗?如果不是(因为我怀疑你的行数),你可能试图用来自'Stop_Times'的不同行的值多次更新每个'Stops'记录。也许你应该过滤掉'Stop_Times'结果? – lanzz

+0

@Lex,来自两个表的stop_id具有相同的数据类型 – Deepu

回答

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 
1

您可能希望思考应用程序中用更大的数据集更新小型(8K)表的意思。

从您向我们提供的少量信息中猜测您的业务逻辑是不可能的。您的UPDATE查询看起来好像在您的停靠表中的行中发生了重大变化,每次都更新数千次。

通常,当从大型表创建小型表时,大型查询是某种汇总查询,其中包含GROUP BYDISTINCT关键字。此查询应该生成更新较小表的正确行数。

+0

感谢Ollie给你回复。 我会尝试使用DISTINCT或GROUP BY。 – Deepu