`
xiaoqiang6775
  • 浏览: 31792 次
  • 性别: 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分区.pdf

    mysql表分区

    mysql表分区策略,包含range分区、list分区、hash分区等方法介绍及详解

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

    Range分区:Range分区是应用范围比较广的表分区方式,它是以列的值的范围来做为分区的划分条件,将记录存放到列值所在的range分区中。  如按照时间划分,2010年1月的数据放到a分区,2月的数据放到b分区,在创建的...

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

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

    MySql数据分区操作之新增分区操作

    如果想在已经建好的表上进行分区,如果使用alter添加分区的话,mysql会提示错误: 代码如下: ERROR 1505 &lt;HY000&gt; Partition management on a not partitioned table is not possible 正确的方法是新建一个具有分区...

    详细介绍Mysql5.1分区技术

    详细介绍mysql5.1 分区技术,通过对list range hash key四种分区技术的举例阐述Mysql分区,18.2.1... RANGE分区 18.2.2. LIST分区 18.2.3. HASH分区 18.2.4. KEY分区 18.2.5. 子分区 18.2.6. MySQL分区处理NULL值的方式

    mysql通过Navicat分区实操讲解

    mysql分区有利于管理非常大的表,mysql分区一共有四种类型,range分区,list分区, hash分区,key分区,我们通过Navicat 可视化工具来分区 1、打开Navicat 找到指定的数据库,设计表 2、打开设计表选择选项,下面有...

    mysql使用教程之分区表的使用方法(删除分区表)

    LIST 分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。 www.jb51.net  HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的...

    MySQL分区表:万字详解与实践指南

    MySQL分区表:万字详解与实践指南 在处理大型MySQL数据库时,分区表是一种强大的功能,可以提高查询性能、管理大量数据以及优化备份和恢复过程。本文将深入探讨MySQL分区表的概念、类型、优势,并通过实际示例展示...

    (mysql面试题)MySQL中的分区表的概念及其作用及代码展示.txt

    - 在上述代码中,我们首先创建了一个名为`orders`的分区表,该表包含三个字段:`id`、`order_date`和`customer_id`。然后,我们使用`PARTITION BY RANGE`子句对表进行分区,根据`order_date`字段的值将数据划分为四...

    MySQL分区表的基本入门教程

    Range分区:最为常用,基于属于一个给定连续区间的列值,把多行分配给分区。最常见的是基于时间字段. 基于分区的列最好是整型,如果日期型的可以使用函数转换为整型。 List分区:LIST分区和RANGE分区类似,区别...

    MySQL数据库表分区注意事项大全【推荐】

    表分区与数据库分区是不一样的那么碰到表分区使用时我们要注意一些什么事情呢,今天我们来看一篇关于MySQL数据库表分区注意事项的细节。 1、分区列索引约束 若表有primary key或unique key,则分区表的分区列必须...

    Mysql数据表分区技术PARTITION浅析

    RANGE分区: 基于属于一个给定连续区间的列值, 把多行分配给分区 LIST分区: 类似于按 RANGE 分区, 区别在于 LIST 分区是基于列值匹配一个离散值集合中的某个值来进行选择 HASH分区: 基于用户定义的表达式的返回值来...

    varchar日期字段分区demo

    Range分区:最为常用,基于属于一个给定连续区间的列值,把多行分配给分区。最常见的是基于时间字段. 基于分区的列最好是整型,如果日期型的可以使用函数转换为整型。varchar日期字段分区sql demo

    基于MySQL分区性能的详细介绍

    MySQL支持RANGE,LIST,HASH,KEY分区类型,其中以RANGE最为常用: Range(范围)–这种模式允许将数据划分不同范围。例如可以将一个表通过年份划分成若干个分区。 Hash(哈希)–这中模式允许通过对表的一个或多个...

    mysql-分区

    1.创建分区表比无分区的正规表要稍微慢些; 2.通过alter table….drop partition语句进行删除比delete语句要快些; 3.在range或list分区类型上添加分区(alter table…add partition语句)是相当快的,因为没有移动...

    MySQL分区分表的设计及实现-收藏备用.pdf

    ( MySQL) 中通过 range 分区和 Merge 存储,提出优化的分区分表算法。实验证明,优化后的算法在实现大数 据量的表查询操作中,工作效率明显提高。 信息技术快速发展,数据库中的表越来越多,大 数据应用正成为软件...

    深入浅析MySQL COLUMNS分区

    COLUMN分区是5.5开始引入的分区功能,只有RANGE COLUMN和LIST COLUMN这两种分区;支持整形、日期、字符串;RANGE和LIST的分区方式非常的相似。 COLUMNS和RANGE和LIST分区的区别 1.针对日期字段的分区就不需要再使用...

Global site tag (gtag.js) - Google Analytics