0

アクターが約30人いる場合、このクエリには20秒以上かかります。これを劇的にスピードアップする方法はありますか?確かにありますが、どのように、どこから始めればよいのかわかりません。

  REPEAT
    FETCH actors INTO a;
      IF a != '' THEN
        IF !(SELECT COUNT(*) FROM movieactor WHERE actor = a) THEN
          INSERT INTO movieactor (actor) 
          VALUES (a);
         END IF;
      END IF;
  UNTIL done END REPEAT;

movieactorテーブルにはとだけがactorありidます。

4

1 に答える 1

1

パフォーマンスを理解するには、テーブルの定義、インデックス、クエリ プラン、およびトリガーを表示する必要があります。ただし、このクエリには明らかな提案がいくつかあります。

次のような集合演算を使用しない理由:

insert into movieactor(actor)
    select a
    from actors
    where a <> '' and
          a not in (select * from (select actor from movieactor))

(二重選択は、MySQL がこれを解析するために必要だと思うものです。)

次に、movieactor.actor にインデックスを作成する必要があります。これにより、おそらくクエリが大幅に高速化されます。

于 2013-01-11T03:07:53.353 に答える