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 回答