使用存储过程中的循环增量创建表

时间:2019-05-15 15:17:55

标签: mysql

我们有很多复杂的SQL代码,它们在HeidiSQL和MySQL WB中运行时会不断掉落。如果我们使用较少的记录运行相同的代码,则运行良好。 我们认为,如果我们在SP中创建一个循环,在该循环中将代码有效地分成10到20次运行,则它可能会成功完成。我认为这可能涉及创建10到20个表,稍后将它们合并为一个表。

尝试在较小的数据集上运行,运行良好。尝试增加服务器RAM和磁盘空间。尝试以多种不同方式修改代码。

我意识到这可能不是理想的解决方案,但是有人要求这样做。如果有人可以帮助我编写代码,我将不胜感激。

下面是我构建的代码,但是不起作用...

Stripe

20张桌子

1 个答案:

答案 0 :(得分:0)

这是有关如何准备和执行语句的简化示例

 DROP PROCEDURE IF EXISTS p;
 delimiter $$
 CREATE PROCEDURE p()
 BEGIN
 DECLARE x  INT;

 SET x = 100;

 WHILE x  <= 300 DO

   set @sql= (select concat('DROP TABLE if EXISTS table',x)); 

   select @sql;
   prepare sqlstmt from @sql;
   execute sqlstmt;
   deallocate prepare sqlstmt;

   set @sql = (select concat('CREATE TABLE table',x,' AS 
   SELECT t1.*
    FROM users t1;'));

    select @sql;
   prepare sqlstmt from @sql;
   execute sqlstmt;
   deallocate prepare sqlstmt; 

     SET x=x+100;

 END WHILE;

 END$$
DELIMITER ;

CALL p();