MySQL分区表
来源:互联网 发布:知乎 郭德纲 编辑:程序博客网 时间:2024/06/05 21:57
一、什么是分区
就是一张表分成多个区域(如:p0,p1...),mysql5.1开始支持数据表分区了。如:若user表的记录超过了几百万条,那么就可以根据入库日期将表分区,也可以根据其他条件来进行分区。
优点:代码维护量小,基本不用改动,提高IO吞吐量
缺点:表的并发程度没有增加
二、什么是分表
1、分表,即把一个很大的表达数据分到几个表中,这样每个表数据都不多。
优点:提高并发量,减小锁的粒度
缺点:代码维护成本高,相关sql都需要改
三、为什么要对表进行分区查看有多个分区
为了改善大型表以及具有各种访问模式的表的可伸缩性,可管理性和提高数据库效率。
四、分区类型分区的一些优点包括:
1)、一些查询可以得到极大的优化,这主要是借助于满足一个给定WHERE语句的数据可以只保存在一个或多个分区内,这样在查找时就不用查找其他剩余的分区
2)、涉及到例如SUM()和COUNT()这样聚合函数的查询,可以很容易地进行并行处理。这种查询的一个简单例子如 “SELECT salesperson_id, COUNT (orders) as order_total FROM sales GROUP BY salesperson_id;”。通过“并行”,这意味着该查询可以在每个分区上同时进行,最终结果只需通过总计所有分区得到的结果
· RANGE分区:基于属于一个给定连续区间的列值(VALUES less THAN),把多行分配给分区。
· LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择(VALUESin),数据不重复。
· HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算(
PARTITIONS num 分区的数量)。
· KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL 服务器提供其自身的哈希函数。必须有一列或多列包含整数值。
五、查看数据库是否支持分区---->show plugins
六、创建分区表
(1)RANGE分区
CREATE TABLE f_user (
id INT not null PRIMARY key,
userName VARCHAR (20) DEFAULT ''
) ENGINE = myisam DEFAULT CHARSET = utf8
PARTITION BY RANGE (id)(
PARTITION p0 VALUES less THAN (300),
PARTITION p1 VALUES less THAN (500),
partition p2 values less than (MAXVALUE)
)
id INT not null PRIMARY key,
userName VARCHAR (20) DEFAULT ''
) ENGINE = myisam DEFAULT CHARSET = utf8
PARTITION BY RANGE (id)(
PARTITION p0 VALUES less THAN (300),
PARTITION p1 VALUES less THAN (500),
partition p2 values less than (MAXVALUE)
)
explain PARTITIONS select * from f_user;
新增分区或删除分区
alter table f_user add partition(partition p2 values less than (MAXVALUE));
alter table f_user DROP partition p2;
alter table f_user DROP partition p2;
(2)list 分区
CREATE TABLE f_user (
id INT not null PRIMARY key,
userName VARCHAR (20) DEFAULT ''
) ENGINE = myisam DEFAULT CHARSET = utf8
PARTITION BY list(id)(
PARTITION p0VALUESin(1,2,3),----区间值不能重复
id INT not null PRIMARY key,
userName VARCHAR (20) DEFAULT ''
) ENGINE = myisam DEFAULT CHARSET = utf8
PARTITION BY list(id)(
PARTITION p0VALUESin(1,2,3),----区间值不能重复
PARTITION p1 VALUES in(4,5,6))
(3)hash分区--->HASH分区主要用来确保数据在预先确定数目的分区中平均分布。在RANGE和LIST分区中,必须明确指定一个给定的列值或列值集合应该保存在哪个分区中;
CREATE TABLE f_user (
id INT not null PRIMARY key,
userName VARCHAR (20) DEFAULT ''
) ENGINE = myisam DEFAULT CHARSET = utf8
PARTITIONBYHASH(id)
id INT not null PRIMARY key,
userName VARCHAR (20) DEFAULT ''
) ENGINE = myisam DEFAULT CHARSET = utf8
PARTITIONBYHASH(id)
PARTITIONS 4;---分区个数
(4)key分区
CREATE TABLE f_user ( id INT not null PRIMARY key, userName VARCHAR (20) DEFAULT '' ) ENGINE = myisam DEFAULT CHARSET = utf8PARTITION BY key(id)PARTITIONS 4;---分区个数(5)子分区
CREATE TABLE f_user222 ( id INT not null PRIMARY key, userName VARCHAR (20) DEFAULT '' ) ENGINE = myisam DEFAULT CHARSET = utf8PARTITION by range(id)
SUBPARTITION by key(id)
SUBPARTITIONs 2 (
PARTITION p0 VALUES less THAN (500),
PARTITION p1 VALUES less than (MAXVALUE))
建立两个range分区,每个分区根据key有分别有两个子分区
1 0
- mysql分区表
- Mysql 分区表
- MySQL分区表
- MySQL分区表
- MySQL分区表
- [MySQL] 分区表
- MySQL分区表
- Mysql 分区表
- MySQL分区表
- MySQL分区表
- MySQL 分区表
- mysql分区表
- MySQL 分区表
- MySQL分区表
- MySQL分区表
- MySQL 分区表
- Mysql分区表
- MySQL 分区表
- SVN的迁移
- 【SQLite数据库小结】SQLite3支持的数据类型
- openCV学习之accumulateWeighted方法
- POJ 2387 Til the Cows Come Home (Spfa) .
- 漫步线性代数三——高斯消元法
- MySQL分区表
- linux环境下创建数据库
- 二叉搜索树的增加 查找 删除
- 一个简单的HTTP暴力破解、撞库攻击脚本
- ScrollView和ListView等组件滑动事件冲突解决方法
- UIScrollView高级用法:delaysContentTouches与canCencelContentTouches属性
- JS透明度变化动画
- ThreadPoolExecutor使用介绍
- Mysql语法基本操作