MySql数据库分表分区方法

分区和分表的区别参考:http://blog.csdn.net/heirenheiren/article/details/7896546

1.merge存储引擎来实现分表

 merge分表,分为主表和子表,主表类似于一个壳子,逻辑上封装了子表,实际上数据都是存储在子表中的。

创建分表:

CREATE TABLE `fen_01` (
  `id` INT(11) primary key NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NULL)
ENGINE = MyISAM;

CREATE TABLE `fen_02` (
  `id` INT(11) primary key NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NULL)
ENGINE = MyISAM;

创建merge表

创建主表的时候有个INSERT_METHOD,指明插入方式,取值可以是:0 不允许插入;FIRST 插入到UNION中的第一个表; LAST 插入到UNION中的最后一个表。

CREATE TABLE `fen_merge` (
  `id` INT(11) primary key NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NULL
 
  )
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
ENGINE = MERGE UNION = (fen_01, fen_02) INSERT_METHOD=LAST

插入数据

insert into fen_01 (name) values('1')

insert into fen_02 (name) values('2')

搜索数据

select * from fen_merge

创建新表并加入merge表

CREATE TABLE fen_03 LIKE fen_01;  
ALTER TABLE fen_merge  
UNION = (fen_01, fen_02, fen_03); 
优缺点:

1.表必须使用MyISAM引擎,但MyISAM无法处理事务,有事务处理需求的表不能使用MyISAM引擎存储。MyISAM存储引擎很适合管理邮件或Web服务器日志数据。

2.MERGE存储引擎是一组MyISAM表的组合,这些MyISAM表结构必须完全相同,UNION表必须同属一个DATABASE。

3.实现分表影响性能,与union几乎等价。

2.自定义规则分表

Range(范围)–这种模式允许将数据划分不同范围。例如可以将一个表通过年份划分成若干个分区。
Hash(哈希)–这中模式允许通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区。例如可以建立一个对表主键进行分区的表。
Key(键值)-上面Hash模式的一种延伸,这里的Hash Key是MySQL系统产生的。
List(预定义列表)–这种模式允许系统通过预定义的列表的值来对数据进行分割。
Composite(复合模式) –以上模式的组合使用 

分区的几种方式

分区和分表相似,都是按照规则分解表。不同在于分表将大表分解为若干个独立的实体表,而分区是将数据分段划分在多个位置存放,可以是同一块磁盘也可以在不同的机器。分区后,表面上还是一张表,但数据散列到多个位置了。app读写的时候操作的还是大表名字,db自动去组织分区的数据

参考:http://blog.csdn.net/tjcyjd/article/details/11194489













你可能感兴趣的:(架构师之路)