mysql partition 语法,MySQL与瀚高数据库的范围分区的语法及实例(APP)

目录

环境

文档用途

详细信息

环境

系统平台: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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL数据库分区是一种将大型表分解为更小和更可管理的部分的技术。它可以提查询性能,减少维护时间和成本。以下是MySQL数据库分区的一些方法和步骤: 1. RANGE分区:按照给定的连续范围将数据行分配到分区中。例如,可以按照日期范围将数据行分配到不同的分区中。 2. LIST分区:与RANGE分区类似,但是使用枚举值而不是连续范围来定义分区。例如,可以按照国家/地区将数据行分配到不同的分区中。 3. HASH分区:使用用户定义的表达式计算每个数据行的哈希值,并将数据行分配到哈希值对应的分区中。例如,可以按照客户ID将数据行分配到不同的分区中。 4. KEY分区:类似于HASH分区,但是使用MySQL关键字来计算哈希值。例如,可以按照自增ID将数据行分配到不同的分区中。 以下是一个创建MySQL数据库分区的例子: ```sql CREATE TABLE sales ( id INT NOT NULL, region VARCHAR(100) NOT NULL, country VARCHAR(100) NOT NULL, amount DECIMAL(10,2) NOT NULL, date DATE NOT NULL ) PARTITION BY RANGE(YEAR(date)) ( PARTITION p0 VALUES LESS THAN (2010), PARTITION p1 VALUES LESS THAN (2011), PARTITION p2 VALUES LESS THAN (2012), PARTITION p3 VALUES LESS THAN (2013), PARTITION p4 VALUES LESS THAN MAXVALUE ); ``` 以上代码将sales表按照日期范围分为5个分区。第一个分区包含2010年之前的数据,第二个分区包含2010年的数据,以此类推,最后一个分区包含所有未包含在前面分区中的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值