=================================================================================

Mysql在5.1版本时增加对分区表的支持,但并不是所有存储引擎都支持分区表,常见的Innodb/MyISAM/NDB等引擎都支持分区表。
使用SHOW PLUGINS来查看数据库是否启用分区功能。

当前Mysql支持一下分区方式:

1、 Range分区,基于连续的范围区间来分区。
2、 List分区,基于离散值集合来分区。
3、 Hash分区,基于用户定义的表达式的返回值来进行选择的分区。
4、 Key分区,类似于HASH分区,只支持对单列或多列使用MySQL自身HASH函数。

=================================================================================

查看分区

--======================================
--查看表中每个分区的数据量
SELECT table_name,partition_name,table_rows
FROM information_schema.PARTITIONS
WHERE table_schema=DATABASE()
AND table_name='' \G --======================================
--查看当前实例中使用分区的表
SELECT
TABLE_SCHEMA AS database_name,
TABLE_NAME AS table_name,
COUNT(1) AS partition_count
FROM INFORMATION_SCHEMA.PARTITIONS
WHERE partition_name IS NOT NULL
GROUP BY TABLE_SCHEMA ,TABLE_NAME;

=================================================================================

分区与唯一索引

无论使用何种类型的分区,如果表中存在主键或唯一索引建时,分区列必须是唯一索引的一个组成部分。
对于SQL SERVER表而言,可以是表分区但表上的部分非聚集索引不分区,也可以表不分区但表上部分非聚集索引分区。

但对MySQL而言,如果表分区,则该分区表上所有索引都是分区索引,在表上建唯一索引时,唯一索引键必须包含表的分区列,否则会报以下错误:
ERROR 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function

=================================================================================

分区与NULL值

在分区中,NULL值小于任何非NULL值,与ORDER BY 排序类似。
对于RANGE分区,NULL值会被放置当分区中的最左边的分区。
对于LIST分区,必须在定义时指明NULL分区放置到哪一个分区下,否则插入NULL值会报错。
对于KEY和HASH分区,NULL值对任何分区函数都会返回值0。

=================================================================================

创建分区

Range分区Demo

## 使用Range分区的注意事项
## 1、避免分区表达式过度复杂,复杂表达式可能会导致查询优化器无法判断分区使用
## 2、必须保证所有表达式的值都被RANGE覆盖,否则会报:ERROR 1526 (HY000): Table has no partition for value xxx CREATE TABLE TB001 (
C1 INT NOT NULL,
C2 VARCHAR(30),
C3 INT
)partition BY RANGE (C3%400) (
partition p0 VALUES LESS THAN (100),
partition p1 VALUES LESS THAN (200),
partition p2 VALUES LESS THAN (300),
partition p3 VALUES LESS THAN (400)
);

List分区Demo

CREATE TABLE TB001 (
C1 INT NOT NULL,
C2 VARCHAR(30),
C3 INT
)partition BY LIST (C3%8) (
partition p0 VALUES LESS THAN (0,1),
partition p1 VALUES LESS THAN (2,3),
partition p2 VALUES LESS THAN (4,5),
partition p3 VALUES LESS THAN (6,7)
);

Hash分区Demo

## 使用HASH分区的注意事项
## 1、必须保证Exprssion返回的值为正数
## 2、通过partitionNumbers指明要分区的数量 CREATE TABLE TB001 (
C1 INT NOT NULL,
C2 VARCHAR(30),
C3 INT
)partition BY HASH(C2) PARTITIONS 4;

Key分区Demo

CREATE TABLE TB001 (
C1 INT NOT NULL,
C2 VARCHAR(30),
C3 INT
)partition BY HASH(C3) PARTITIONS 4;

=================================================================================

分区交换

在MYSQL 5.6版本开始,提供了分区交换的功能。

分区交换Demo

-- ======================================
-- 创建分区表
DROP TABLE PB_001;
CREATE TABLE PB_001
(
ID INT AUTO_INCREMENT PRIMARY KEY,
C1 VARCHAR(200)
)PARTITION BY RANGE(ID)
(
PARTITION P0 VALUES LESS THAN (100),
PARTITION P1 VALUES LESS THAN (200),
PARTITION P2 VALUES LESS THAN (1000),
PARTITION P3 VALUES LESS THAN (MAXVALUE)
); -- =====================================
-- 插入测试数据
INSERT INTO PB_001(C1)
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS \G -- =====================================
-- 查看每个分区的数据
SELECT table_name,partition_name,table_rows
FROM information_schema.PARTITIONS
WHERE table_schema=DATABASE()
AND table_name='' \G -- =====================================
-- 创建分区切换的表
CREATE TABLE PB_001_His LIKE PB_001; -- =====================================
-- 去除PB_001_His 分区
ALTER TABLE PB_001_His REMOVE PARTITIONING; -- =====================================
-- 切换分区
ALTER TABLE PB_001 EXCHANGE PARTITION P0 WITH TABLE PB_001_His;

=================================================================================

删除分区

## 删除指定分区
ALTER TABLE table_name DROP PARTITION parition_name ; ## 将分区表修改为非分区表
alter table table_name remove partitioning;

MySQL Partition--分区基础的更多相关文章

  1. mysql Partition(分区)初探

    mysql Partition(分区)初探   表数据量大的时候一般都考虑水平拆分,即所谓的sharding.不过mysql本身具有分区功能,可以实现一定程度 的水平切分.  mysql是具有MERG ...

  2. MySQL partition分区I

    http://blog.csdn.net/binger819623/article/details/5280267 一.        分区的概念二.        为什么使用分区?(优点)三.    ...

  3. MYSQL之水平分区----MySQL partition分区I(5.1)

    一.        分区的概念 二.        为什么使用分区?(优点) 三.        分区类型 四.        子分区 五.        对分区进行修改(增加.删除.分解.合并) 六 ...

  4. MySQL PARTITION 分区

    MySQL HASH分区 http://www.cnblogs.com/chenmh/p/5644496.html RANGE分区:http://www.cnblogs.com/chenmh/p/56 ...

  5. MySQL Partition分区扫盲

    MySQL从5..3开始支持Partition,你可以使用如下命令来确认你的版本是否支持Partition: mysql> SHOW VARIABLES LIKE '%partition%'; ...

  6. mysql partition分区

    (转) 自5.1开始对分区(Partition)有支持 = 水平分区(根据列属性按行分)=举个简单例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录. === 水 ...

  7. mysql的partition分区

    前言:当一个表里面存储的数据特别多的时候,比如单个.myd数据都已经达到10G了的话,必然导致读取的效率很低,这个时候我们可以采用把数据分到几张表里面来解决问题.方式一:通过业务逻辑根据数据的大小通过 ...

  8. mysql表分区 partition

    表分区 partition 当一张表的数据非常多的时候,比如单个.myd文件都达到10G, 这时,必然读取起来效率降低. 可不可以把表的数据分开在几张表上? 1: 从业务角度可以解决.. (分表,水平 ...

  9. Mysql Partition 理论知识总结

    简述: 本文内容主要 Giuseppe Maxia 曾在Mysql Conference & Expo 2010发表关于 <Mysql Partition in Mysql 5.1 &a ...

  10. mysql表分区实战

    一,什么是数据库分区以mysql为例,mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面 (可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件 ...

随机推荐

  1. table 奇行偶行

    jquery 方法: $("tr:odd").//偶行 $("tr:even") //奇行

  2. Bootstrap datepicker 在弹出窗体modal中不工作

    解决办法 在 show 方法后面 添加 下面一段代码 $('#modalCard').modal('show');—例子 打开 弹出窗体 //$('#modalCard').modal('hide') ...

  3. 福大软工 · 第八次作业(课堂实战)——项目UML设计(团队)

    团队 学号 姓名 本次作业博客链接 031602428 苏路明(组长) https://www.cnblogs.com/Sulumer/p/9822854.html 031602401 陈瀚霖 htt ...

  4. 通过调整浏览器UA设置欺骗限制上网

    先上图片, 通过调整浏览器UA,欺骗识别,原来这个WIFI是只能手机端使用的,打开IE   F12,进行如上图所示,进行修改,正常输入手机号,获取验证码,登陆后,即可上网了.虽然显示的是400,但实际 ...

  5. 《团队-Python 爬取豆瓣电影top250-成员简介及分工》

    杨继尧,没有什么擅长的,会一点python,一点c#,爬取利用数据库,有些用法不太会,但是会在实现项目中查资料.

  6. 2019-03-22-day017-re模块

    讲在课前 严格的执行每天的内容 学习的方法 记笔记 课上记框架 画思维导图 常用模块 30分钟 复习 翻笔记 2h 把课上的例子跟着都敲一遍 遇到不会的 自己研究5分钟 还不会 问问同学 再不会 问问 ...

  7. ftell

    ftell:当前位置rewind:不管文件指向哪,它都会还原指向首部 缓存区的作用:大多数情况下是好事,合并系统调用行缓冲:换行.满了.强制(标准输出)刷新全缓冲:满了.强制(默认,只要不是终端)刷新 ...

  8. 【转载】Vue项目自动转换 px 为 rem,高保真还原设计图

    前端开发中还原设计图的重要性毋庸置疑,目前来说应用最多的应该也还是使用rem.然而很多人依然还是处于刀耕火种的时代,要么自己去计算rem值,要么依靠编辑器安装插件转换. 而本文的目标就是通过一系列的配 ...

  9. shell 或 Makefile 学习网站

    1.http://man.linuxde.net/ 2.http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html

  10. Power BI十大视觉效果,知多少?

    Power BI十大视觉效果: 图表滑块 响应式布局 一键更改方差计算 一键排序 我们的最爱:小倍数! 瀑布图中的轴断裂 层次表(完全响应) HICHERT博士的IBCS®原生支持 分段图表 - 可视 ...