大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说Mysql千万级别水平分表优化「终于解决」,希望您对编程的造诣更进一步.
需求:随着数据量的增加单表已经不能很好的支持业务,千万级别数据查询缓慢
Mysql数据优化方案:
方案一:使用myisam进行水平分表优化
方案二:使用mysql分区优化
一:Myisam水平分区
1、创建水平分表 user_1:
– 创建水平分表
create table user_1(
id varchar(50) PRIMARY key COMMENT “主键id”,
user_name varchar(50) DEFAULT null COMMENT “用户名称”,
creator varchar(50) DEFAULT null COMMENT “创建者”,
create_date datetime DEFAULT null COMMENT “创建时间”,
updater varchar(50) DEFAULT null COMMENT “更新者”,
update_date datetime DEFAULT null COMMENT “更新时间”
)ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=”用户1表”;
2、创建水平分表 user_2:
create table user_2(
id varchar(50) PRIMARY key COMMENT “主键id”,
user_name varchar(50) DEFAULT null COMMENT “用户名称”,
creator varchar(50) DEFAULT null COMMENT “创建者”,
create_date datetime DEFAULT null COMMENT “创建时间”,
updater varchar(50) DEFAULT null COMMENT “更新者”,
update_date datetime DEFAULT null COMMENT “更新时间”
)ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=”用户2表”;
3、创建水平分表 user
– 创建总表
create table user(
id varchar(50) PRIMARY key COMMENT “主键id”,
user_name varchar(50) DEFAULT null COMMENT “用户名称”,
creator varchar(50) DEFAULT null COMMENT “创建者”,
create_date datetime DEFAULT null COMMENT “创建时间”,
updater varchar(50) DEFAULT null COMMENT “更新者”,
update_date datetime DEFAULT null COMMENT “更新时间”
)ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=LAST UNION=(
`user_1`,`user_2`);
4、新增添加分区 user_3
create table user_3(
id varchar(50) PRIMARY key COMMENT “主键id”,
user_name varchar(50) DEFAULT null COMMENT “用户名称”,
creator varchar(50) DEFAULT null COMMENT “创建者”,
create_date datetime DEFAULT null COMMENT “创建时间”,
updater varchar(50) DEFAULT null COMMENT “更新者”,
update_date datetime DEFAULT null COMMENT “更新时间”
)ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=”用户3表”;
初始化数据
– 插入数据
insert into user_1(`id`,`user_name`,`create_date`,`update_date`) values (“1″,”张三”,now(),now());
insert into user_1(`id`,`user_name`,`create_date`,`update_date`) values (“2″,”李四”,now(),now());
insert into user_2(`id`,`user_name`,`create_date`,`update_date`) values (“1″,”王五”,now(),now());
insert into user_3(`id`,`user_name`,`create_date`,`update_date`) values (“3″,”赵六3”,now(),now());
insert into user(`id`,`user_name`,`create_date`,`update_date`) values (“4″,”老赵1”,now(),now());
验证数据结果:通过
5、重新添加分区
alter table user UNION=(`user_1`,`user_2`,`user_3`);
参数说明
1:分表ENGINE必须为:MyISAM,总表必须为MRG_MyISAM
2:INSERT_METHOD:向总表插入数据默认到哪个位置取值:
0:不允许插入
1:允许插入
FIRST:merge的第一张表
LAST:merge的最后一张表
出现异常错误 郑州看男科医院那家好:http://www.xasgnanke.com/郑州治男科哪家医院好:http://www.xasgnanke.com/郑州男科医院排名:http://www.xasgnanke.com/
1168 – Unable to open underlying table which is differently defined or of non-MyISAM type or doesn”t exist
问题定位:
分表MERGE引擎仅适用于MYISAM表
union了不存在的表或者不在同一个数据库中的表
表的结构不一致
————————————————
版权声明:本文为CSDN博主「吴豪磊」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_31150503/article/details/105450236
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9021.html