首页 > 代码库 > centos7-mysql-分表
centos7-mysql-分表
数据库越来越大,单个表中数据过多,查询读写,还有锁机制,会导致严重的数据库性能影响.
表锁,行锁,都是为了保证数据的完整性,
分表
分表是把一个大表,分成若干个独立储存空间的表,每个表都对应MYD数据文件,MYI索引文件,FRM表结构文件,这些表可以分布在一个存储设备,也可以分在不同存储设备.
相当于一个表变为多个表,如果这时候有APP已经在使用中,而且会对原表进行操作等等,需要开发修改代码,因为原来的一个表已经分成好几个,按照原来的表肯定是搜索不到的.
将单表拆分,再根据一定算法,就可以将数据分散到多个表中,对数据量大的数据库,会有明显的提升,
减少数据库负担,缩短查询时间,这是分表的主要目的
mysql分表-分为垂直切分,和水平切分.
垂直切分是按照列切分,水平就是行切分(需求不同自行挑选)
垂直切分
一般垂直切分都是把经常查询的列单独分到一张表中,方便查询
水平拆分
表的数据非常庞大,可以分成多个表,提高查询效率
--------------------------------------------------------------------------------------------------------
分表的几种方式
1-mysql集群
这个不是分表但是也是相同的作用,任务分担到多台mysql数据库
2-预先估计表的访问量,提前分为若干表,以防万一
根据一定算法,将数据分散到不同表中.
3-利用merge存储引擎来分表
merge只能用在myisam上进行分表.
merge分为主表跟子表,主表中是子表的位置,如果使用myisam来分表的话APP可以不需要修改连接数据的信息,还是可以直接从主表中查询.
做一个merge的实例
create database gao;
use gao;
create table gao(
id bigint auto_increment primary key,
name varchar(20),
sex tinyint not null default ‘0‘)
engine=myisam default charset=utf8 auto_increment=1;
批量加入数据
insert into gao(name,sex) values(‘gao‘,1);
insert into gao(name,sex)select name,sex from gao; 将查询到的数据插入,所以,数据都一样只是测验用
开始进行分表,首先创建两个子表
use gao;
drop table if exists gao_1;
create table gao_1(
id bingint primary key,
name varchar(20)
sex tinyint not null default ‘0‘)
engine=myisam default charset=utf8;
因为第二个表跟上面的一模一样除了名字
create table gao_2 like gao_1;
创建主表
drop table if exists mastergao;
create table mastergao(
id bigint primary key auto_increment ,
name varchar(20),
sex tinyint not null default ‘0‘)
engine=mergeunion=(gao_1,gao_2) insert_method=last charset=utf8 auto_increment=1;
insert_method = last 表示茶如道最后一张表 first 表示插入到第一张表
数据导入到两个子表当中.
insert into gao_1(id,name,sex) select id,name,sex from gao where id%2=1;
insert into gao_2(id,name,sex) select id,name,sex from gao where id%2=0;
id%2后的值单双导入到两个表中
这时候查询两个表跟主表,数据都有了就可以删除原来的gao将mastergao更改为gao即可.
alter table mastergao rename gao;完成
--------------------------------------------------------------------------------------------------------------
本文出自 “11627223” 博客,请务必保留此出处http://11637223.blog.51cto.com/11627223/1911976
centos7-mysql-分表