MySQL 分区介绍

200 ? "200px" : this.width)!important;}
-->

介绍

分区是指根据一定的规则将一个大表分解成多个更小的部分,这里的规则一般就是利用分区规则将表进行水平切分;逻辑上没有发生变化但实际上表已经被拆分成了多个物理对象,每个分成被划分成了一个独立的对象。相对于没有分区的当个表而言分区的表有很多的优势包括: 并发统计查询、快速归档删除分区数据、分散存储、查询性能更佳。

mysql5.7以后查询语句支持指定分区例如:“ SELECT * FROM t PARTITION (p0,p1) WHERE c < 5 ”指定分区同样适用DELETEINSERTREPLACEUPDATE, and LOAD DATALOAD XML.

数据库版本:mysql5.7.12

是否支持分区

SHOW PLUGINS ;

查询partition的的状态是active就代表支持分区,如果是源码安装的话在编译的过程中要添加“-DWITH_PARTITION_STORAGE_ENGINE=1 \”。

注意: MERGECSV, or FEDERATED存储引擎不支持分区,同一个表所有的分区必须使用相同的存储引擎,不能分区1使用MYISAM分区2又使用INNODB;不同的分区表可以是不同的存储引擎。

分区类型

目前mysql可用的分区类型主要有以下几种:

RANGE分区:基于一个给定的连续区间范围,RANGE主要是基于整数的分区,一些时间类型的字段可以借助相应的函数转换成整形。同时在5.5以上的版本提供了基于非整形的RANGE COLUMN分区。

LIST分区:类似RANGE分区,区别在于list分区是基于列出的枚举值列表进行分区,它同样支持利用函数转换等。同时也提供了LIST COLUMN支持非整形的分区。

HASH分区:基于给定的分区个数,将数据分配到不同的分区。表达式基于非负整数值

KEY分区:类似HASH分区。

注意:分区的分区号是从0开始,同时注意分区名的大小写敏感问题,和关键字问题。

无论哪种分区类型,要么分区表中没有主键或唯一键,要么主键或唯一键包含在分区列里面,对于存在主键或者唯一键的表不能使用主键或者唯一键之外的字段作为分区字段。

总结

最新的5.7版本中也没有专门基于时间类型的字段的分区方案,但是针对时间类型的分区可以使用其它的方式取代比如RANGE和LIST分区可以使用时间函数,KEY分区可以直接基于时间类型的字段进行分区;基于时间类型的字段的转换函数mysql提供了"YEAR(),MONTH(),DAY(),TO_DAYS(),TO_SECONDS(),WEEKDAY(),DAYOFYEAR()"在接下来的文章中会分别对各个分区进行详细的介绍。


备注:

作者:pursuer.chen

博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

《欢迎交流讨论》

时间: 2024-11-05 15:47:44

MySQL 分区介绍的相关文章

Mysql 分区介绍(一) ——概述

一.分区类型 1. RANGE类型(范围分区) 通过范围的方式进行分区, 为每个分区给出一定的范围, 范围必须是连续的并且不能重复, 使用VALUES LESS THAN操作符 啥意思呢? 就是range类型就是一种范围, 比如, 从1-10, 11-20, 21-30这种的方式分区, 1-10就在一个分区里, 11-20是另外一个分区, 但是看起来他们还是同一个表 <br /> 咱们看一个创建的例子 CREATE TABLE `t1` ( `id` int(11) NOT NULL, `ui

Mysql 分区介绍(四) —— RANGE COLUMNS分区

RANGE COLUMNS和RANGE分区是非常类似的, 但是这两个也有很多不同的地方. RANGE COLUMNS 不可以使用表达式, 只能使用列名 RANGE COLUMNS 接受一个或多个字段的列表 RANGE COLUMNS 分区列是不限制于数字列的;字符串, DATE和DATETIME 列也可以使用在分区列 基本定义: CREATE TABLE table_name PARTITIONED BY RANGE COLUMNS(column_list) ( PARTITION partit

Mysql 分区介绍(五) —— LIST COLUMNS分区

Mysql 5.6开始支持LIST COLUMNS分区, 可以开始使用多个列作为分区的键, 并且列的数据类型除了数字类型可以作为分区列; 你也可以使用字符串类型, DATE和DATETIME 你有一个在12个城市客户的业务, 为了销售和市场的目的, 你的组织每3个城市划分为一个区域针对LIST COLUMNS分区, 你可以基于城市的名称创建一个客户数据表并声明4个分区当你的客户存在对应的这个区域: CREATE TABLE customers_1 ( first_name VARCHAR(25)

Mysql 分区介绍(六) —— HASH分区

hash分区是使用主键去确保数据均匀分布在一个预先确定数字的分区上. 在range 或list分区中. 你必须显式的指定给出的数据写入哪个分区或设置一个列值去保存; 在hash分区中. Mysql已经为你准备的. 你只需要指定一个列的值或表达式基于列值去hash和分区的数字在哪个分区表中. CREATE TABLE employees ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFA

Mysql 分区介绍(九) —— 分区管理

一.分区操作 1. 将没有分区的表改为分区表 ALTER TABLE trb3 PARTITION BY KEY(id) PARTITIONS 2; 2. 删除分区 # 删除所有分区, 同时数据丢失 ALTER TABLE es2 REMOVE PARTITIONING; # 删除指定分区, 数据丢失 ALTER TABLE tr DROP PARTITION p2; 3. SELECT指定分区查询 select * from daily_rank_1_1 partition (p2015_04

Mysql 分区介绍(二) —— RANGE分区

通过范围的方式进行分区, 为每个分区给出一定的范围, 范围必须是连续的并且不能重复, 使用VALUES LESS THAN操作符<br /> 让我们先来创建一个range分区的表 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

Mysql 分区介绍(三) —— LIST分区

LIST不同于RANGE分区, 每个分区必须被显式的定义, 每个分区是根据列值的成员在一组列表中的元素定义的 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, store_id INT

Mysql 分区 分表相关总结之方案选择

[TOC] 引述 前段时间项目需要,一直在研究mysql sharding,看了一些这方面的资料,也亲自实验测试了一些数据.在此,做个概括的笔记,方便以后回顾知识,其实大多是借鉴网络上各位前辈的,然后抱着学习态度去实践,积累属于自己的东西. 拆分策略选择 其实拆分很灵活,有的是垂直切分,将一个库拆成两个或多个,将有相关联的表放在一个库里.有的是水平切分将数据量大的表按照一定逻辑进行拆分.个人感觉垂直切分的相对来说缓解了IO的瓶颈,而水平切分,目的是减轻了单个表或某些表读写的压力. 我们项目根据个

MySQL分区技术 (一)

4:MySQL 分区技术(是mysql 5.1以版本后开始用->是甲骨文mysql技术团队维护人员以插件形式插入到mysql里面的技术) 目前,针对海量数据的优化主要有2中方法: 1:大表拆成小表的方式(物理上) 一:垂直分表->一张垂直切成几张 二:水平分表(一般重点)->横切,意思就是一张表有100个数据横切10张表,一张表存10条(字段一致) 2:SQL语句的优化(可以通过增加索引等来调整,但是数据量大的增大会导致索引的维护代价增大) 水平分区技术将一个表拆成多个表,比较常用的方式