当我有大约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
。 最佳答案
您确实需要显示表定义,索引,查询计划和触发器以了解性能。但是,此查询有一些明显的建议。
为什么不使用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/