目录
环境
文档用途
详细信息
环境
系统平台:Microsoft Windows (64-bit) 10
版本:5.6.4
文档用途
当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。
表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据分类存放到多个表空间的物理文件上,
这样查询数据时,不至于每次都扫描整张表。
分区类型分为范围分区(range partition)、列表分区(list partition)、哈希分区(hash partition)等。
本次主要介绍MySQL和瀚高数据库的范围分区。
MySQL的范围分区:
含义:基于属于一个给定连续区间的列值,把多行分配给分区。主键、约束、索引在分区表中创建。
关键字:RANGE、VALUES LESS THAN
RANGE又可分为原生RANGE和RANGE COLUMNS。
1) 对于原生RANGE分区,分区字段必须是整型或者转换为整型,如果分区字段是日期类型的字段,那么就必须将日期类型的字段转换成整型类型。对于日期类型的转换,优化器只支持year(),to_days,to_seconds,unix_timestamp()函数的转换,其他的并不支持,也就是说,在按日期字段分区的时候,如果不是使用上述几个函数转换的,查询优化器将无法对相关查询进行优化。
2) 对于RANGE COLUMNS分区,不可以使用表达式,只能使用列名;接受一个或多个字段的列表;分区列是不限制于数字列的;字符串、DATE和DATETIME列也可以使用在分区列。
注:分区字段必须包含在主键内
语法:
原生RANGE分区语法:
CREATE TABLE table_name(column_name data_type)
PARTITION BY RANGE(整型column_list|整型转换函数(column_list)) (
PARTITION partition_name VALUES LESS THAN (value_list)[,
PARTITION partition_name VALUES LESS THAN (value_list)][,
...]
)
column_list:
column_name[, column_name][, ...]
value_list:
value[, value][, ...]
column_list是一个或多个列名, value_list是和column_list相对应的一个或多个值
RANGE COLUMNS分区语法:
CREATE TABLE table_name(column_name data_type)
PARTITION BY RANGE COLUMNS(column_list) (
PARTITION partition_name VALUES LESS THAN (value_list)[,
PARTITION partition_name VALUES LESS THAN (value_list)][,
...]
)
column_list:
column_name[, column_name][, ...]
value_list:
value[, value][, ...] column_list是一个或多个列名, value_list是和column_list相对应的一个或多个值
注:在value_list中有一个最大值MAXVALUE,可以创建MAXVALUE的分区,存储超出范围的数据
删除分区语法:
ALTER TABLE table_name DROP PARTITION partition_name;
瀚高数据库的范围分区:
含义:支持单列、多列分区,例如:RANGE(x,y)
关键字:RANGE、FOR VALUES FROM(……) TO(……)
注:主键、约束、索引等不能在分区表中创建,目前只能在各个分区中创建。分区表只是一个表结构。
语法:
-- 主表
CREATE TABLE table_name ( column_name data_type )
PARTITION BY RANGE ( { column_name } [, ... ] )
-- 子表
CREATE TABLE table_name
PARTITION OF parent_table
FOR VALUES
FROM ( { numeric_literal | string_literal | TRUE | FALSE | MINVALUE | MAXVALUE } [, ...] )
TO ( { numeric_literal | string_literal | TRUE | FALSE | MINVALUE | MAXVALUE } [, ...] )
注:MINVALUE是最小值,MAXVALUE是最大值,为了防止插入范围以外的数据时报错,可以创建两个分区,
分别是MINVALUE和MAXVALUE的分区。分区字段的值不能为NULL。
删除分区语法:
-- 把分区修改成普通表
ALTER TABLE table_name DETACH PARTITION partition_name;
-- 删除分区 DROP TABLE partition_name;
详细信息
下面通过实例进行详细说明:
MySQL的范围分区实例:
测试环境:Win10+MySQL5.7
1. 原生RANGE分区实例
1) 使用整型字段score作为分区key
create table student(
sid integer auto_increment,
sname varchar(20),
score integer,
birthday DATETIME,
ssex varchar(10),
primary key(sid,score) -- score是分区字段,必须作为主键
)
partition by range(score)(
partition p0 values less than(10),-- 分区p0
partition p1 values less than(20),-- 分区p1
partition p2 values less than(30),-- 分区p2
partition p3 values less than(40),-- 分区p3
partition p4 values less than(50),-- 分区p4
partition p5 values less than(60),-- 分区p5
partition p6 values less than(70),-- 分区p6
partition p7 values less than(80) -- 分区p7 );
标签:name,column,APP,partition,list,RANGE,实例,MySQL,分区
来源: https://blog.csdn.net/pg_hgdb/article/details/110222928