MySQL 横向表分区之RANGE分区小结
MySQL 横向表分区之RANGE分区小结
by:授客 QQ:1033553122
目录
简介
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分区小结的更多相关文章
- Mysql --分区(3)range分区
3.分区类型 RANGE分区 按照range分区的表是利用取值范围将数据分成分区,区间要连续并且不能互相重叠,使用values less than操作符进行分区定义 CREATE TABLE tnp ...
- mysql分区表之二:MySQL的表的四种分区类型介绍
一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了.如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区 ...
- mysql分区之range分区
随着互联网的发展,各方面的数据越来越多,从最近两年大数据越来越强的呼声中就可见一斑. 我们所做的项目虽算不上什么大项目,但是由于业务量的问题,数据也是相当的多. 数据一多,就很容易出现性能问题,而为了 ...
- 高性能可扩展mysql 笔记(三)Hash分区、RANGE分区、LIST分区
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.MySQL分区表操作 1.定义:数据库表分区是数据库基本设计规范之一,分区表在物理上表现为多个文件, ...
- Mysql数据库(表)的导出和导入小结
Why? 有人因为想看导出的开房记录库文件,然后学会了Mysql数据库文件的导入操作~: 有人因为工作原因,要用到数据库的备份与导入,然后应需学会了骚操作~: 我因为~~emmm 想看某个导出的库文件 ...
- MySQL表的四种分区类型
MySQL表的四种分区类型 一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表 ...
- MySQL RANGE分区
200 ? "200px" : this.width)!important;} --> 介绍 RANGE分区基于一个给定的连续区间范围,早期版本RANGE主要是基于整数的分区 ...
- mysql表分区(摘自 MySQL表的四种分区类型)
一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区 ...
- MySQL的表分区
什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了.如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区.当然 ...
随机推荐
- 必须要会的 50 个 React 面试题
翻译:疯狂的技术宅 原文:www.edureka.co/blog/interv… 如果你是一位有抱负的前端程序员并准备面试,那么这篇文章很适合你.本文是你学习和面试 React 所需知识的完美指南. ...
- Java使用OkHttps工具类调用外部接口
前言 现在公司业务已止不是传统的增删改查等简单的业务处理操作,而是对数据各种联调三方接口与其他系统进行交互等,那么就需要我们在后台java中进行外部接口的调用,本文采用OkHttps工具类对接微信接口 ...
- VueJs(14)---理解Vuex
理解Vuex 一.Vuex 是什么? 首先我们来分析一种实际开发中用vue.js的场景,你有n个组件,当你改变一个组件数据的时候需要同时改变其它n个组件的数据,那么我想你可能会对 vue 组件之间的通 ...
- mysql 开发基础系列4 字符数据类型
字符串类型 1.1 CHAR 和VARCHAR 类型 CHAR 列的长度固定为创建表时声明的长度,VARCHAR 列中的值为可变长字符串.在检索的时候,CHAR 列删除了尾部的空格,而VARCHAR ...
- 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装爬虫框架Scrapy(离线方式和在线方式)(图文详解)
不多说,直接上干货! 参考博客 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装OpenCV(离线方式和在线方式)(图文详解) 第一步:首先,提示升级下pip 第二步 ...
- 对requestAnimationFrame的一点理解
假设一个web页面为60fps(fps意为frame per second),这意为着这个页面每秒钟能重新渲染60次,60帧/1000ms换算过来约为16.6ms/帧. requestAnimatio ...
- ZOJ Problem Set - 3708 Density of Power Network
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3708 #include <stdio.h> #include ...
- 函数式编程之-Partial application
上一篇关于Currying的介绍,我们提到F#是如何做Currying变换的: let addWithThreeParameters x y z = x + y + z let intermediat ...
- 【原创】使用golang访问windows telnet服务器
本篇博客记录本次使用golang语言tcp方式进行telnet服务器访问 环境: 1.win7系统telnet服务器,使用地址:192.168.8.189 2.python使用telnetlib库对t ...
- Android studio 编译出现的问题记录
1.app:transformClassesWithJarMergingForDebug'. Error:Execution failed for task ':app:transformClasse ...