1

まず、これが以前の投稿で取り上げられていて、見逃していた場合はお詫び申し上げます。私は多くの検索を行ってきましたが、これまでに機能するものは何も見つかりませんでした。

現在、以下のクエリを使用してテーブル内のレコードを更新しています。

UPDATE table SET Column1="1" WHERE Column2 LIKE "Text";

問題は、更新するテキストがそれぞれ異なる 100,000 行を超える行があり、一度に 15,000 行を更新するのに 45 分かかることです。私は SQL を初めて使用しますが、更新する必要がある行を更新する最も効率的な方法ではないことは確かです。

ここで出会った他の提案を使用しようとしましたが、これまでのところうまくいきませんでした。

4

1 に答える 1

1

レコードをすばやく検索できるようにするには、関連する列にインデックスが必要です。(詳細については、クエリ計画を参照してください。)

この特定のケースでは、 にインデックスが必要ですColumn2LIKEは大文字と小文字を区別しないため、次のように大文字と小文字を区別しないインデックスを作成する必要があります。

CREATE INDEX MyTable_Column2 ON MyTable(Column2 COLLATE NOCASE);

さらに、affinityColumn2で宣言されている必要があります。TEXT


複数の更新を 1 つのトランザクションにラップします。そうしないと、トランザクションのオーバーヘッドが実際の更新に必要な時間よりもはるかに大きくなります。


クエリがインデックスを使用できるかどうかは、 EXPLAIN QUERY PLANでいつでも確認できます。

于 2013-05-29T17:18:18.640 に答える