分区表优点
可以把一些归类的数据放在一个分区中,可以减少服务器检查数据的数量加快查询。
方便维护,通过删除分区来删除老的数据。
分区数据可以被分布到不同的物理位置,可以做分布式有效利用多个硬盘驱动器。
可以优化、检查、修复个别分区。
根据查找条件,也就是where后面的条件,查找只查找相应的分区不用全部查找了。
进行大数据搜索时可以进行并行处理。
跨多个磁盘来分散数据查询,来获得更大的查询吞吐量。
分区表缺点
每张表最大分区数为1024。
所有的主键或者唯一索引必须被包含在分区表达式中。
不能使用任何外键约束
Range(范围) – 这种模式允许DBA将数据划分不同范围。例如DBA可以将一个表通过年份划分成三个分区,80年代(1980's)的数据,90年代(1990's)的数据以及任何在2000年(包括2000年)后的数据。(百合消息表)
List(预定义列表) – 这种模式允许系统通过DBA定义的列表的值所对应的行数据进行分割。例如:DBA建立了一个横跨三个分区的表,分别根据2004年2005年和2006年值所对应的数据。
Hash(哈希) – 这中模式允许DBA通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区,。例如DBA可以建立一个对表主键进行分区的表(筑龙用户表,积分表,答题表)。
Key(键值) – Hash模式的一种延伸,这里的Hash Key是MySQL系统产生的。//mysql的函数
Composite(复合模式) - 其实是以上模式的组合使用而已。例如:在初始化已经进行了Range范围分区的表上,我们可以对其中一个分区再进行hash或KEY(Linear Hash)分区。
Range 和 List 的缺点是容易造成热点数据集中 优点:可部分迁移
Hash Key 相对来说是均匀的 缺点:数据迁移的时候麻烦;不能按照机器性能分摊数据
部分命令分区展示:
3.利用merge存储引擎来实现分表(筑龙百科实现)
merge分表,分为主表和子表,主表类似于一个壳子,逻辑上封装了子表,实际上数据都是存储在子表中的 基于mysql的引擎(MYISM/MRG_MYISAM)实现。
CREATE
TABLE
`account_2012` (
`id`
int
(11)
NOT
NULL
AUTO_INCREMENT ,
`
name
`
varchar
(50)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`money`
float
NOT
NULL
,
`tradeDate` datetime
NOT
NULL
PRIMARY
KEY
(`id`)
)
ENGINE=MyISAM
DEFAULT
CHARACTER
SET
=utf8
COLLATE
=utf8_general_ci
AUTO_INCREMENT=2
CHECKSUM=0
ROW_FORMAT=
DYNAMIC
DELAY_KEY_WRITE=0
;
CREATE
TABLE
`account_all` (
`id`
int
(11)
NOT
NULL
AUTO_INCREMENT ,
`
name
`
varchar
(50)
CHARACTER
SET
utf8
COLLATE
utf8_general_ci
NULL
DEFAULT
NULL
,
`money`
float
NOT
NULL
,
`tradeDate` datetime
NOT
NULL
PRIMARY
KEY
(`id`)
)
ENGINE=MRG_MYISAM
DEFAULT
CHARACTER
SET
=utf8
COLLATE
=utf8_general_ci
UNION
=(`account_2011`,`account_2012`)
INSERT_METHOD=
LAST
ROW_FORMAT=
DYNAMIC
;