赞
踩
Mysql分区
1、什么是mysql分区
2、mysql分区的有点和缺点
MySQL分区带来的好处太多了,这里强调两点好处:
性能的提升(Increased performance) - 在扫描操作中,如果MySQL的优化器知道哪个分区中才包含特定查询中需要的数据,它就能直接去扫描那些分区的数据,而不用浪费很多时间扫描不需要的地方 了。需要举个例子?好啊,百万行的表划分为10个分区,每个分区就包含十万行数据,那么查询分区需要的时间仅仅是全表扫描的十分之一了,很明显的对比。同 时对十万行的表建立索引的速度也会比百万行的快得多得多。如果你能把这些分区建立在不同的磁盘上,这时候的I/O读写速度就“不堪设想”(没用错词,真的 太快了,理论上100倍的速度提升啊,这是多么快的响应速度啊,所以有点不堪设想了)了。
对数据管理的简化(Simplified data management) - MySQL分区技术可以让DBA对数据的管理能力提升。通过优良的MySQL分区,DBA可以简化特定数据操作的执行方式。例如:DBA在对某些分区的内容进行删除的同时能保证余下的分区的数据完整性(这是跟对表的数据删除这种大动作做比较的)。 此外分区是由MySQL系统直接管理的,DBA不需要手工的去划分和维护。
在下面的场景中,分区可以起到非常大的作用:
A:表非常大以至于无法全部都放在内存中,或者只在表的最后部分有热点数据,其他都是历史数据
B:分区表的数据更容易维护,如:想批量删除大量数据可以使用清除整个分区的方式。另外,还可以对一个独立分区进行优化、检查、修复等操作
C:分区表的数据可以分布在不同的物理设备上,从而高效地利用多个硬件设备
D:可以使用分区表来避免某些特殊的瓶颈,如:innodb的单个索引的互斥访问,ext3文件系统的inode锁竞争等
E:如果需要,还可以备份和恢复独立的分区,这在非常大的数据集的场景下效果非常好
F:优化查询,在where字句中包含分区列时,可以只使用必要的分区来提高查询效率,同时在涉及sum()和count()这类聚合函数的查询时,可以在每个分区上面并行处理,最终只需要汇总所有分区得到的结果。
分区本身也有一些限制:
A:一个表最多只能有1024个分区(mysql5.6之后支持8192个分区)
B:在mysql5.1中分区表达式必须是整数,或者是返回整数的表达式,在5.5之后,某些场景可以直接使用字符串列和日期类型列来进行分区(使用varchar字符串类型列时,一般还是字符串的日期作为分区)。
C:如果分区字段中有主键或者唯一索引列,那么所有主键列和唯一索引列都必须包含进来,如果表中有主键或唯一索引,那么分区键必须是主键或唯一索引
D:分区表中无法使用外键约束
E:mysql数据库支持的分区类型为水平分区,并不支持垂直分区,因此,mysql数据库的分区中索引是局部分区索引,一个分区中既存放了数据又存放了索引,而全局分区是指的数据库放在各个分区中,但是所有的数据的索引放在另外一个对象中
F:目前mysql不支持空间类型和临时表类型进行分区。不支持全文索引
3、mysql分区的几种方式
4、mysql分区与水平分表的区别
5、mysql分区的具体实现
RANGE
分区:基于属于一个给定连续区间的列值,把多行分配给分区。
RANGE
分区:基于属于一个给定连续区间的列值,把多行分配给分区。
RANGE
分区:基于属于一个给定连续区间的列值,把多行分配给分区。
RANGE
分区:基于属于一个给定连续区间的列值,把多行分配给分区。
RANGE
分区:基于属于一个给定连续区间的列值,把多行分配给分区。
RANGE
分区:基于属于一个给定连续区间的列值,把多行分配给分区。
RANGE
分区:基于
RANGE 分区:基于属于一个给定连续区间的列值,把多行分配给分区。
DROP
TABLE
IF
EXISTS
`p_range`;
CREATE
TABLE
`p_range`
(
`id`
int(10)
NOT
NULL
AUTO_INCREMENT,
`name`
char(20)
NOT
NULL,
PRIMARY
KEY
(`id`)
)
ENGINE=MyISAM
AUTO_INCREMENT=9
DEFAULT
CHARSET=utf8
/*!50100
PARTITION
BY
RANGE
(id)
(PARTITION
p0
VALUES
LESS
THAN
(8)
ENGINE
=
MyISAM)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。