`
xiaoqiang6775
  • 浏览: 32755 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MySql创建Range分区

阅读更多

MySQL 中,支持对表创建分区,主要的分区类型有Range 分区、List 分区、Hash 分区、Key 分区和子分区。

    最近在项目中使用到Range 分区,将数据表进行了分区;Range 分区基于属于一个给定连续区间的列值,把多行分配给分区。每个分区包含那些分区表达式的值位于一个给定的连续区间内的行。这些区间要连续且不能相互重叠,使用VALUES LESS THAN 操作符来进行定义。在下面的几个例子中,假定你创建了一个如下的一个表,该表保存有20 家音像店的职员记录,这20 家音像店的编号从120

 

CREATE TABLE employees (

    id INT NOT NULL,

    fname VARCHAR(30),

    lname VARCHAR(30),

    hired DATE NOT NULL DEFAULT '1970-01-01',

    separated DATE NOT NULL DEFAULT '9999-12-31',

    job_code INT NOT NULL,

    store_id INT NOT NULL

);
 

根据你的需要,这个表可以有多种方式来按照区间进行分区。一种方式是使用store_id 列。例如,你可能决定通过添加一个PARTITION BY RANGE 子句把这个表分割成4 个区间,如下所示:

 

CREATE TABLE employees (

    id INT NOT NULL,

    fname VARCHAR(30),

    lname VARCHAR(30),

    hired DATE NOT NULL DEFAULT '1970-01-01',

    separated DATE NOT NULL DEFAULT '9999-12-31',

    job_code INT NOT NULL,

    store_id INT NOT NULL

)

PARTITION BY RANGE (store_id) (

    PARTITION p0 VALUES LESS THAN (6),

    PARTITION p1 VALUES LESS THAN (11),

    PARTITION p2 VALUES LESS THAN (16),

    PARTITION p3 VALUES LESS THAN (21)

);
 

按照这种分区方案,在商店15 工作的雇员相对应的所有行被保存在分区P0 中,商店610 的雇员保存在P1 中,依次类推。注意,每个分区都是按顺序进行定义,从最低到最高。这是PARTITION BY RANGE 语法的要求;在这点上,它类似于CJava 中的“switch ... case ”语句。

对于包含数据(72, 'Michael', 'Widenius', '1998-06-25', NULL, 13) 的一个新行,可以很容易地确定它将插入到p2 分区中,但是如果增加了一个编号为第21 的商店,将会发生什么呢?在这种方案下,由于没有规则把store_id 大于20 的商店包含在内,服务器将不知道把该行保存在何处,将会导致错误。 要避免这种错误,可以通过在CREATE TABLE 语句中使用一个“catchall VALUES LESS THAN 子句,该子句提供给所有大于明确指定的最高值的值:

 

CREATE TABLE employees (

    id INT NOT NULL,

    fname VARCHAR(30),

    lname VARCHAR(30),

    hired DATE NOT NULL DEFAULT '1970-01-01',

    separated DATE NOT NULL DEFAULT '9999-12-31',

    job_code INT NOT NULL,

    store_id INT NOT NULL

)

PARTITION BY RANGE (store_id) (

    PARTITION p0 VALUES LESS THAN (6),

PARTITION p1 VALUES LESS THAN (11),

PARTITION p2 VALUES LESS THAN (16),

 

    PARTITION p3 VALUES LESS THAN MAXVALUE

);
 

MAXVALUE 表示最大的可能的整数值。现在,store_id 列值大于或等于16 (定义了的最高值)的所有行都将保存在分区p3 中。在将来的某个时候,当商店数已经增长到25, 30, 或更多 ,可以使用ALTER TABLE 语句为商店21-25, 26-30, 等等增加新的分区 。

在几乎一样的结构中,你还可以基于雇员的工作代码来分割表,也就是说,基于job_code 列值的连续区间。例如——假定2 位数字的工作代码用来表示普通(店内的)工人,三个数字代码表示办公室和支持人员,四个数字代码表示管理层,你可以使用下面的语句创建该分区表:

 

CREATE TABLE employees (

    id INT NOT NULL,

    fname VARCHAR(30),

    lname VARCHAR(30),

    hired DATE NOT NULL DEFAULT '1970-01-01',

    separated DATE NOT NULL DEFAULT '9999-12-31',

    job_code INT NOT NULL,

    store_id INT NOT NULL

)

PARTITION BY RANGE (job_code) (

    PARTITION p0 VALUES LESS THAN (100),

    PARTITION p1 VALUES LESS THAN (1000),

    PARTITION p2 VALUES LESS THAN (10000)

);
 

在这个例子中, 店内工人相关的所有行将保存在分区p0 中,办公室和支持人员相关的所有行保存在分区p1 中,管理层相关的所有行保存在分区p2 中。

VALUES LESS THAN 子句中使用一个表达式也是可能的。这里最值得注意的限制是MySQL 必须能够计算表达式的返回值作为LESS THAN (<) 比较的一部分;因此,表达式的值不能为NULL 。由于这个原因,雇员表的hired, separated, job_code,store_id 列已经被定义为非空(NOT NULL )。

分享到:
评论

相关推荐

    MySQL中创建数据表Range分区.pdf

    在介绍MySQL中创建数据表的Range分区之前,首先需要了解分区的概念。分区是将一个表中的数据分成多个更小的、更易于管理的部分的技术。这通常用于大型数据库,可以提高查询性能,便于数据维护和备份。MySQL支持多种...

    创建mysql表分区的方法

    **示例:RANGE分区创建** ```sql 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 PARTITION...

    mysql实现自动创建与删除分区

    本文将深入探讨如何实现MySQL的自动创建与删除分区,主要关注时间分区,并介绍相关存储过程和事件的设置。 首先,我们需要理解MySQL分区的概念。分区是将一个大表逻辑上划分为多个较小的部分,每个部分称为一个分区...

    MySQL分区分表方案实践手册

    - **RANGE分区**:根据表中某一列的值属于某个连续区间来分配数据行到相应的分区。例如,可以按照员工工资的不同范围进行分区。 - **LIST分区**:与RANGE分区类似,但是LIST分区是基于列值是否匹配于一个离散的值...

    mysql表分区

    MySQL表分区支持不同的分区策略,例如range分区、list分区和hash分区等。 **range分区**是根据数据范围来进行分区的一种方法。它允许数据根据列值的范围被分配到不同的分区中。例如,可以根据日期、数值或其他连续...

    MySQL 分区

    `savepro.sql`文件可能包含SQL脚本,用于创建、插入数据或者备份和恢复MySQL数据库中的分区表。在实际操作中,你需要使用MySQL客户端工具(如MySQL Workbench或命令行客户端)来执行这些脚本。 为了充分利用分区,...

    MySQL分区实战

    通过上述介绍可以看出,RANGE分区是MySQL数据库中一种非常实用且功能强大的特性,它不仅能够显著提高大型表的查询性能,还能够简化数据管理流程。理解并合理运用RANGE分区策略,对于提升数据库性能具有重要意义。

    Oracle10个分区和Mysql分区区别详解

    1. Range分区:这种分区方式基于列值的范围进行划分,适用于那些具有连续性或时间序列的数据,例如日期。例如,可以创建一个按月份划分的分区,所有2010年1月的数据存放在一个分区,2月的数据存放在另一个分区。如果...

    MySQL的表分区详解

    MySQL的表分区是一种数据库优化策略,它将一个大表分解为多个较小的、更易管理和查询的部分,以提高数据检索速度和数据库性能。这一技术自MySQL 5.1版本开始被广泛支持。表分区主要应用于大数据量的场景,通过合理...

    MySQL 5.5 range分区增加删除处理的方法示例

    介绍 RANGE分区基于一个给定的连续...本文将给大家介绍MySQL 5.5 range分区增加删除处理的相关内容,分享给大家供大家参考学习,下面来看看详细的介绍: 一、删除分区 ##查看要处理的分区的数据量,并导出作为备份 mys

    mysql如何进行分区-mysql分区有哪些方法.docx

    下面是一些分区创建的例子: 1. **RANGE 分区示例**: ```sql CREATE TABLE t_range ( id INT(11), money INT(11) UNSIGNED NOT NULL, date DATETIME ) PARTITION BY RANGE (YEAR(date)) ( PARTITION p2007 ...

    mysql如何进行分区-mysql分区有哪些方法.pdf

    针对大规模数据存储,MySQL 提供了一种高效的管理策略——分区(Partitioning),这有助于提高查询性能,尤其是在处理海量数据时。分区是将一个大表划分为逻辑上独立的部分,每个部分(或称为分区)可以在物理上分散...

    mysql-存储分区-实验八.docx

    - 子分区的创建,例如将Range分区进一步细分为两个子分区。 - 数据迁移和处理,例如将5月数据复制到新表,增加amount后再放回原分区表。 - 计算不同分区数下的Hash值,理解其分布规律。 3. **问题与解决**: - ...

    MySQL 5.5.8 分区表性能测试

    1. **分区类型**:MySQL支持多种分区类型,包括范围(RANGE)、列表(LIST)、哈希(HASH)和键值(KEY)。范围分区通常基于数值或日期范围,列表分区则根据指定的值列表进行划分,哈希分区基于用户定义的函数,而...

    mysql分库分表分区1

    1. **RANGE分区**: RANGE 分区是根据列值属于一个预定义的连续区间来分配数据。在示例中,`employees` 表被按照 `store_id` 列的值范围进行分区,如 `PARTITION p0 VALUES LESS THAN (6)`,这意味着所有 `store_id...

    MYSQL 通过分区(Partition)提升MySQL性能

    - **Range分区**:根据一个列的值范围进行分区。例如,根据日期的不同年份来划分分区。 - **Hash分区**:基于列值的哈希函数计算结果来进行分区。这种方式适合于数据分布均匀的场景。 - **Key分区**:类似于Hash分区...

    mysql分区.pdf

    例如,如果有一个日期字段,可以创建多个RANGE分区来存储特定日期范围内的数据。 2. LIST分区:类似于RANGE分区,但是LIST分区是基于列值的列表来分区。如果列值匹配列表中的某个特定值,则该行数据会被存放到对应...

Global site tag (gtag.js) - Google Analytics