当我有大约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表只有一个actorid

最佳答案

您确实需要显示表定义,索引,查询计划和触发器以了解性能。但是,此查询有一些明显的建议。

为什么不使用set操作,例如:

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


(我认为双重选择是MySQL解析此事件所必需的。)

其次,您应该在movieactor.actor上有一个索引。这可能会大大加快查询速度。

关于mysql - 为什么这个MySQL查询需要这么长时间,我该如何解决?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14270966/

10-11 01:36