这个问题与:
有关它使用此代码:
CREATE PROCEDURE myProc(IN t1 timestamp, IN t2 timestamp)
BEGIN
WHILE t1 <= t2 DO
INSERT INTO test (ts) Values (t1) ;
SET t1 = DATE_ADD(t1, INTERVAL 3 MINUTE);
END WHILE;
END;
这样调用:
CALL myProc(now(), ADDDATE(NOW(), INTERVAL 15 MINUTE));
非常慢。有没有办法加快速度(例如以不同的方式做事)?
答案 0 :(得分:1)
我认为在交易中包装它会改善事情......就像:
CREATE PROCEDURE myProc(IN t1 timestamp, IN t2 timestamp)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
END;
START TRANSACTION;
WHILE t1 <= t2 DO
INSERT INTO test (ts) Values (t1) ;
SET t1 = DATE_ADD(t1, INTERVAL 3 MINUTE);
END WHILE;
COMMIT;
END
我只是将它们放在一起并且没有测试过,但我认为这可能有所帮助。
答案 1 :(得分:1)
我认为你可以通过使用临时表来加速你的程序。 这是计划:
CREATE PROCEDURE myProc(IN t1 timestamp, IN t2 timestamp)
BEGIN
CREATE TEMPORARY TABLE tmp (ts timestamp);
WHILE t1 <= t2 DO
INSERT INTO tmp SET ts = t1;
SET t1 = DATE_ADD(t1, INTERVAL 3 MINUTE);
END WHILE;
INSERT INTO test (ts) SELECT ts FROM tmp;
DROP TABLE tmp;
END;