最近在忙一个MYSQL的项目,数据量比较大,正式运行后大约每天有2千万的数据!
因此计划使用Merge表,每天建立一个新表,现在的问题就是Merge表究竟可以容纳多少子表?
查了不少资料,结果没有找到这方面的信息!还请有经验的大侠们不吝赐教!
因此计划使用Merge表,每天建立一个新表,现在的问题就是Merge表究竟可以容纳多少子表?
查了不少资料,结果没有找到这方面的信息!还请有经验的大侠们不吝赐教!
解决方案 »
- mysql 的存储过程把列名作为变量为什么老是有问题?求解 附上代码及图:
- 从SQL表里获取排名,求SQL达人相助
- mysqld-net线程在流量监控下有时上传流量有时异常
- 问个sending data问题
- navcat备份 保存在服务器什么地方(路径) 文件名称?
- 如何解决mysql在win2000下不登录或锁定计算机时无法工作的问题
- 这个select 该怎么写,高手指教
- 建立一个账号abc 对test库的test表有DELETE 测试的时候竟然能插入 能查询 求大神给指点
- mysql长什么样啊亲爱的大神们!
- mysql无法从doc环境进入root
- 查询时间段内数据 一个很诡异的问题
- PHP 程序找错(处理冗沉重复信息)
谢谢您的回复!不过我在想,假设实际运用中运行一年就有365张表,表名即使设计的很简练,那create本merge表的时候那个create的sql语句也最够长了吧!难道没有什么限制?
确实好像没有什么限制!
刚才写了两个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 ;