MySQL 横向表分区之RANGE分区小结

by:授客 QQ:1033553122

目录

简介 1

RANGE分区 1

创建分区表 1

查看表分区 2

新增表分区 2

新增数据 3

分区表查询 3

删除数据 4

删除分区 4

简介

mysql表分区--RANGE分区,属于横向分区。举例说,假如有100条数据,分成十份,前10条数据放到第一个分区,第二个10条数据放到第二个分区,依此类推。横向分区,并不会改变表的结构。

 

RANGE分区

基于属于一个给定连续区间的列值,把多行分配给分区。

创建分区表

例子:按user_id分区,创建分区表

CREATE TABLE `auth_user_group` (

`id` INT(11) NOT NULL AUTO_INCREMENT,

`user_id` INT(11) NOT NULL,

`group_id` INT(11) NOT NULL,

PRIMARY KEY (id, user_id)

)

PARTITION BY RANGE(user_id) (

PARTITION p1 VALUES LESS THAN (6),

PARTITION p2 VALUES LESS THAN (11),

PARTITION pmax VALUES LESS THAN MAXVALUE

);

注意:

1、分区字段必须是主键、联合主键的一部分,否则会报如下错误:

A PRIMARY KEY must include all columns in the table's partitioning function

2、分区字段值的设置必须是连续的,否则会报错

注解:

PARTITION 分区名 VALUES THAN (字段值)

如上表定义,意为,user_id值小于6的记录,存放在p1表分区,值大于等于6,小于11的记录,存放在p2表分区,小于最大值,大于等于11的记录,都存放在pmax分区。

查看表分区

SHOW CREATE TABLE table_name;

例子:

SHOW CREATE TABLE auth_user_group;

结果如下:

CREATE TABLE `auth_user_group` (

`id` INT(11) NOT NULL AUTO_INCREMENT,

`user_id` INT(11) NOT NULL,

`group_id` INT(11) NOT NULL,

PRIMARY KEY (`id`,`user_id`)

) ENGINE=INNODB DEFAULT CHARSET=utf8

新增表分区

注意:如果创建分区表时,使用了MAXVALUE,形如:

PARTITION pmax VALUES LESS MAXVALUE,那么新增分区时会报错,类似如下:

MAXVALUE can only be used in last partition definition

原因:因为新增分区时,是在原有分区列表末尾继续添加,而THAN MAXVALUE正好位于末尾,同时其也包含了要添加的分区范围,所提系统会任务冲突,解决方法,定义分区表时,不设置MAXVALUE,如下:

CREATE TABLE `auth_user_group2` (

`id` INT(11) NOT NULL AUTO_INCREMENT,

`user_id` INT(11) NOT NULL,

`group_id` INT(11) NOT NULL,

PRIMARY KEY (id, user_id)

)

PARTITION BY RANGE(user_id) (

PARTITION p1 VALUES LESS THAN (6),

PARTITION p2 VALUES LESS THAN (11)

);

ALTER TABLE auth_user_group2 ADD PARTITION

(PARTITION p3 VALUES LESS THAN (21),

PARTITION p4 VALUES LESS THAN (31)

)

新增数据

和普通插入一样,但是要注意的是,分区字段值不能超过给定分区的最大值(例中为30),

例:

INSERT INTO auth_user_group2(user_id, group_id) VALUES(39, 30);

报错:

Table has no partition for value 39

修改改成这样就可以:

INSERT INTO auth_user_group2(user_id, group_id) VALUES(10, 30);

分区表查询

增对分区表,我们在查询时可以指定分区,加快查询速度。

SELECT * FROM auth_user_group2 PARTITION(p2)

如果涉及多个分区,则用逗号隔开。

SELECT * FROM auth_user_group2 PARTITION(p2, p3)

删除数据

增对分区表,我们在删除时可以指定分区,避免检索带来的时间消耗。

DELETE FROM auth_user_group2 PARTITION (p2) WHERE id = 1

和查询一样,如果涉及到多个分区,则逗号分隔

DELETE FROM auth_user_group2 PARTITION (p2, p3) WHERE id = 1

删除分区

ALTER TABLE auth_user_group2 DROP PARTITION p3

注意:删除分区也会删除记录

MySQL 横向表分区之RANGE分区小结的更多相关文章

  1. Mysql --分区(3)range分区

    3.分区类型 RANGE分区 按照range分区的表是利用取值范围将数据分成分区,区间要连续并且不能互相重叠,使用values less than操作符进行分区定义 CREATE TABLE tnp ...

  2. mysql分区表之二:MySQL的表的四种分区类型介绍

    一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了.如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区 ...

  3. mysql分区之range分区

    随着互联网的发展,各方面的数据越来越多,从最近两年大数据越来越强的呼声中就可见一斑. 我们所做的项目虽算不上什么大项目,但是由于业务量的问题,数据也是相当的多. 数据一多,就很容易出现性能问题,而为了 ...

  4. 高性能可扩展mysql 笔记(三)Hash分区、RANGE分区、LIST分区

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.MySQL分区表操作 1.定义:数据库表分区是数据库基本设计规范之一,分区表在物理上表现为多个文件, ...

  5. Mysql数据库(表)的导出和导入小结

    Why? 有人因为想看导出的开房记录库文件,然后学会了Mysql数据库文件的导入操作~: 有人因为工作原因,要用到数据库的备份与导入,然后应需学会了骚操作~: 我因为~~emmm 想看某个导出的库文件 ...

  6. MySQL表的四种分区类型

    MySQL表的四种分区类型 一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表 ...

  7. MySQL RANGE分区

    200 ? "200px" : this.width)!important;} --> 介绍 RANGE分区基于一个给定的连续区间范围,早期版本RANGE主要是基于整数的分区 ...

  8. mysql表分区(摘自 MySQL表的四种分区类型)

    一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区 ...

  9. MySQL的表分区

    什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了.如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区.当然 ...

随机推荐

  1. Android--UI之DatePicker、TimePicker...

    前言 这一篇博客分别讲解Android平台下,关于日期和时间的几个相关控件.包括DatePicker(日期选择控件).TimePicker(时间选择控件).DatePickerDialog(日期选择对 ...

  2. Java I/O : Java中的进制详解

    作者:李强强 上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算.这一讲,泥瓦匠带你走进Java中的进制详解. 一.引子 在Java世界里,99%的工作都是处理这高层. ...

  3. Vc数据库编程基础MySql数据库的常见库命令.跟表操作命令

    Vc数据库编程基础MySql数据库的常见操作 一丶数据库常见的库操作 1.1查看全部数据库 命令:  show databases 1.2 创建数据库 命令: Create database 数据库名 ...

  4. CSS语法基础

    引言:CSS语法 CSS规则由两个主要的部分构成:选择器,以及一条或者多条声明. selector { property: value; property: value; ... property: ...

  5. 痞子衡嵌入式:备受开源社区推崇的分布式版本控制工具(Git)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是分布式版本控制工具Git. 1.为什么需要版本控制系统? 单人软件项目开发过程,往往很多功能都是逐步增加的,在代码开发过程中,有的时候功 ...

  6. JavaScript基础回顾一(类型、值和变量)

    请看代码并思考输出结果 var scope = 'global'; function f(){ console.log(scope); var scope = 'local'; console.log ...

  7. IFS简单说明

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html bash下的很多命令都会分割单词,绝大多数时候默认是采用空格作 ...

  8. MySQL Router实现MySQL的读写分离

    1.简介 MySQL Router是MySQL官方提供的一个轻量级MySQL中间件,用于取代以前老版本的SQL proxy. 既然MySQL Router是一个数据库的中间件,那么MySQL Rout ...

  9. MySQL中间件之ProxySQL(8):SQL语句的重写规则

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.为什么要重写SQL语句 ProxySQL在收到前端发送来的SQL语 ...

  10. Go基础系列:接口类型断言和type-switch

    接口类型探测:类型断言 接口实例中存储了实现接口的类型实例,类型的实例有两种:值类型实例和指针类型实例.在程序运行过程中,接口实例存储的实例类型可能会动态改变.例如: // ins是接口实例 var ...