0

Stops と Stop_Times という 2 つのテーブルがあり、これらは旅行代理店に関連しています。8,000 件のレコードを持つ停止と、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

これら 2 つのテーブルには、MyISAM ストレージ エンジンを使用しています。索引付けされた Stops および Stop_Times テーブルを作成しました。

Linux CentO でこのクエリを実行しています。

UPDATE クエリの速度を上げる方法はありますか?

4

2 に答える 2

1

非常に大きなデータセットで小さな (8K) テーブルを更新することがアプリケーションで何を意味するのかを考えてみてください。

ご提供いただいた少量の情報からビジネス ロジックを推測することはできません。あなたのUPDATEクエリは、Stops テーブルの行を叩いて、それぞれを何万回も冗長に更新しているように見えます。

GROUP BY通常、大きなテーブルから小さなテーブルを作成する場合、大きなテーブルに対するクエリは、 または のいずれかのDISTINCTキーワードを含む、ある種の要約クエリです。このクエリは、小さいテーブルを更新するための正しい数の行を生成する必要があります。

于 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 に答える