mysql分区
2018-06-17 22:49:27来源:未知 阅读 ()
- 分区对应用来说是完全透明的,不影响应用的业务逻辑
- 创建分区,是对数据表,和索引表,同时创建分区的。
- 不能分别创建分区;同时也不能对部分数据进行分区;
- 分区在创建完成之后,管理员也无法动态更改;
- 和单个磁盘或者文件系统分区相比,可以存储更多数据
- 优化查询。在where子句中包含分区条件时,可以只扫描必要的一个或多个分区来提高查询效率。
- 对于已经过期或者不需要保存的数据,可以通过删除与这些数据有关的分区来快速删除数据
- 跨多个磁盘来分散数据查询,以获得更大的查询吞吐量
mysql> show variables like '%partition%'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | have_partitioning | YES | +-------------------+-------+
- range分区:基于一个给定连续区间范围,把数据分配到不同的分区。
- list分区:类似range分区,区别在于list分区是基于枚举的值列表分区,range是基于给定的连续区间范围分区
- hash分区:基于给定的分区个数,把数据分配到不同的分区
- key分区:类似与hash分区
mysql> show create table emp; | emp | CREATE TABLE `emp` ( `id` int(11) NOT NULL, `store_id` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (store_id) (PARTITION p0 VALUES LESS THAN (10) ENGINE = InnoDB) */ | 1 row in set (0.00 sec) mysql> insert into emp values(1,11); ERROR 1526 (HY000): Table has no partition for value 11 mysql> insert into emp values(1,10); ERROR 1526 (HY000): Table has no partition for value 10 mysql> insert into emp values(1,9); Query OK, 1 row affected (0.01 sec)
mysql> alter table emp add partition (partition p1 values less than (20)); Query OK, 0 rows affected (0.06 sec) mysql> insert into emp values(2,18); Query OK, 1 row affected (0.00 sec)
PARTITION BY RANGE COLUMNS (TIME) ( PARTITION p0 VALUES LESS THAN ('1996-01-01'), PARTITION p2 VALUES LESS THAN ('2006-01-01') )
- 当需要删除过期的数据时。只需要alter table emp drop partition p0 来删除p0分区中的数据。对于上百万条记录的表来说,删除分区要比运行一个delete 语句有效得多
- 经常运行包含分区键的查询,mysql可以很快地确定只有某一个或某些分区需要扫描。例如,上述例子中检索store_id ,大于10的记录,mysql只需要扫描p1 ;
partition by list (id) ( partition p0 values in (3,5), partition p1 values in (1,10), partition p0 values in (4,6), partition p1 values in (2,8), )
partition by list columns (category) ( partition p0 values in ('lodging','food'), partition p1 values in ('good','bad'), partition p0 values in ('flights','groud') )
- 整数:tinyint,smallint,mediumint,int,bigint;不支持其他类型,如float,decimal;
- 日期时间:date,datetime
- 字符串:char,varchar,binary,varbinary;不支持text,blob;
partition by range colulmns (a,b)( partition p01 values less than (0,10), partition p02 values less than (10,10), partition p03 values less than (10,20) )
- 常规hash分区:通过MOD()取模的方式,确定插入数据在具体哪个分区内。
-
- 语法:partition by hash (id) partition 4;分成4个分区;
- 线性hash分区:分区函数是一个线性的2的幂的运算法则,确定插入数据在具体哪个分区内。
-
- 语法:partition by linear hash (id) partition 4;
- 优点:在分区维护(包含,增加,删除,合并,拆分分区)时,mysql能够处理得更加迅速;
- 缺点:对比常规hash分区(取模)的时候,线性hash各个分区之间数据的分布不太均衡
- range分区中,null值会被当做最小值来处理;
- list分区中,null值必须出现在枚举列表中,否则不接受
- hash/key,null值会被当做零值来处理;
alter table emp drop partition p1;
alter table emp add partition (partition p3 values less than (2000) )
假设原有p1,p2,p3,现在要增加一个分区,px的命名随意,但是values less than (xxx)一定是大于当前分区中最大值的;
alter table emp reorganize partition p3 into (partition p2 values less than (2005),partition p3 values less than (2015) )
mysql> alter table emp reorganize partition p3,p4 into (partition p2 values less than (40));
注意:p3,p4,合并后范围只能变大,不能缩小;即 p2 范围>=40;
- 拆分与合并,后范围只能变大,不能缩小;
- 同时不能与其他分区 重叠,即只能够重新定义相邻的分区,不能跳分区进行重定义;
-
- alter table emp coalesce partition 2;
- coalesce 不能用来增加分区数量
-
- alter table emp add partition partition 8
- PARTITION BY RANGE (store_id) ( PARTITION p0 VALUES LESS THAN (10) ) - PARTITION BY RANGE COLUMNS (TIME) ( PARTITION p0 VALUES LESS THAN ('1996-01-01'),PARTITION p2 VALUES LESS THAN ('2006-01-01') ) - partition by range colulmns (a,b) ( partition p01 values less than (0,10) ) - VALUES LESS THAN MAXVALUE :比最大值大的其他值的分区;list中不存在; - partition by list (id) ( partition p0 values in (3,5)) - partition by list columns (category) ( partition p0 values in ('lodging','food') ) - partition by hash (id) partition 4; - alter table emp drop partition p1; - altertable emp add partition (partition p3 values less than (2000) ) - alter table emp reorganize partition p3 into (partition p2 values less than (2005),partition p3 values less than (2015) ) - alter table emp reorganize partition p3,p4 into (partition p2 values less than (40)); - alter table emp coalesce partition 2; - alter table emp add partition partition 8
- 分区特点:
-
- 对应用是透明的
- 对数据表和索引表同时创建分区
- 创建完成后无法动态修改这里指的是已经表结构中指定分区字段
- 不能对部分数据进行分区,
- 分区优点:
-
- 优化查询
- 存储更多数据
- 分区处理过期数据
- 跨盘查询提高吞吐量
- range:
-
- 基与给定区间范围,把数据分配到不同分区;
- 区间要连续并且不能相互重叠;
- 特别适合:
-
- 当需要删除过期的数据时
- 经常运行包含分区键的查询。
- list:
-
- 类似range分区,list分区是基于枚举值列表分区;
- 插入只可以是,分区中枚举出来的值;
- hash:
-
- 基于给定的分区个数,把数据均匀分配到不同的分区;
- 主要用来分散热点读;
- KEY:类似与hash分区
- 如存在主键/唯一键字段,则只能使用其作为分区字段
- columns 分区:partition by range colulmns(time);
- 多字段分区 :
-
- partition by range colulmns (a,b) (partition p01 values less than (ma,mb));
- 先比较a,如果a小于ma,则直接存,当a=ma且b<mb时 也是符合要求的;
- 分区管理:
-
- range和list:增,删,合并,拆分;
- 拆分与合并,后范围只能变大,不能缩小;
- 同时不能与其他分区 重叠,只能够重新定义相邻的分区,不能跳分区进行重定义;
- hash:删,增;
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- MySQL replace函数怎么替换字符串语句 2020-03-09
- PHP访问MySQL查询超时怎么办 2020-03-09
- mysql登录时闪退 2020-02-27
- MySQL出现1067错误号 2020-02-27
- mysql7.x如何单独安装mysql 2020-02-27
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash