最近在忙一个MYSQL的项目,数据量比较大,正式运行后大约每天有2千万的数据!
因此计划使用Merge表,每天建立一个新表,现在的问题就是Merge表究竟可以容纳多少子表?
查了不少资料,结果没有找到这方面的信息!还请有经验的大侠们不吝赐教!

解决方案 »

  1.   


    谢谢您的回复!不过我在想,假设实际运用中运行一年就有365张表,表名即使设计的很简练,那create本merge表的时候那个create的sql语句也最够长了吧!难道没有什么限制?
      

  2.   


    确实好像没有什么限制!
    刚才写了两个procedure测试一下,建立一个带有1000个子表的merge表,还是可以正常访问的!
    就不去管他究竟最大支持多少表了!结帖!附上测试用的procedure:delimiter //
    create procedure prc_crt_table(in tbl_nam varchar(100),in p_num integer(2))
    deterministic
    sql security definer
    comment ''
    begin
    declare count int default 0;
    declare vsql varchar(4000) default '';
    set @count=0;
    repeat 
      set @count=@count+1;
      set @vsql=concat("create table if not exists ",tbl_nam,@count," (id int,name varchar(100),sex tinyint)");
      prepare create_stmt from @vsql;
      execute create_stmt;
    until @count=p_num
    end repeat;set @count=0;
    set @vsql="";
    repeat
    set @count=@count+1;
    if @vsql="" then
    set @vsql=concat(tbl_nam,@count);
    else
    set @vsql=concat(@vsql,",",tbl_nam,@count);
    end if;
    until @count=p_num end repeat;
    set @vsql=concat("create table if not exists ",tbl_nam,"  (id int,name varchar(100),sex tinyint) engine=merge union=(",@vsql,") insert_method=last");
    prepare create_stmt from @vsql;
    execute create_stmt;
    end;
    //
    delimiter ;
    delimiter //
    create procedure prc_dlt_table(in tbl_nam varchar(100),in p_num integer(2))
    deterministic
    sql security definer
    comment ''
    begin
    declare count int default 0;
    declare vsql varchar(4000) default '';
    set @count=0;
    set @vsql=concat("drop table ",tbl_nam);
    prepare create_stmt from @vsql;
    execute create_stmt;
    repeat 
      set @count=@count+1;
      set @vsql=concat("drop table ",tbl_nam,@count);
      prepare create_stmt from @vsql;
      execute create_stmt;
    until @count=p_num
    end repeat;
    end;
    //
    delimiter ;