Mysql分区表使⽤

⼀、什么是分区表mysql

分区表就是按⼀定规则将⼀张表分割成多个部分,达到和物理分表一样的效果,但操做起来更简单,不一样于物理分表那样使⽤时还须要指定使⽤的数据表。对于使⽤者来讲和操做普通表⽆差异。sql

⼆、优点与限制数据库

一、优点服务器

  • 分区能够在⼀个表中存储⽐单个磁盘或⽂件系统分区上的数据更多的数据,由于咱们可 以将分区表存储在不一样物理磁盘上;
  • 对于⼤表数据,能够快速删除指定分区上的数据,效率⽐普通表delete⾼不少;
  • 查询的时候,若是where⼦句中包含分区列,则会减小IO,提高查询效率;
  • 对于⼤表尤为是innodb引擎的表,进⾏count()或sum()查询时,能够分区并⾏查询,提⾼效率。

二、限制函数

  • 若是分区字段中有主键或者惟⼀索引列,那么全部主键列和惟⼀索引列都必须包含进 来,若是表中有主键或惟⼀索引,那么分区键必须是主键或惟⼀索引;
  • 分区函数限制,⽬前mysql仅⽀持如下分区函数:ABS()、CEILING()、DATEDIFF()、 DAY()、DAYOFMONTH()、DAYOFWEEK()、DAYOFYEAR()、EXTRACT()、FLOOR()、 HOUR()、MICROSECOND()、MINUTE()、MOD()、MONTH()、QUARTER()、SECOND()、 TIME_TO_SEC()、TO_DAYS()、TO_SECONDS()、UNIX_TIMESTAMP()、WEEKDAY()、YEAR()、 YEARWEEK();
  • 全部分区上的数据库引擎要⼀致; ⼀张表能够设置8192个分区。

3、分区类型spa

一、RANGE分区code

基于⼀个给定连续区间范围,把数据分配到不一样的分区。blog

CREATE TABLE r1 (
a INT,
b INT
)
PARTITION BY RANGE (a) (
PARTITION p0 VALUES LESS THAN (5),
PARTITION p1 VALUES LESS THAN (MAXVALUE)
);

二、LIST分区索引

相似RANGE分区,区别在LIST分区是基于枚举出的值列表分区,RANGE是基于给定连续区间范 围分区。ci

CREATE TABLE customers_1 (
first_name VARCHAR(25),
last_name VARCHAR(25),
street_1 VARCHAR(30),
street_2 VARCHAR(30),
city VARCHAR(15),
renewal DATE
)
PARTITION BY LIST COLUMNS(city) (
PARTITION pRegion_1 VALUES IN('Oskarshamn', 'Högsby', 'Mönsterås'),
PARTITION pRegion_2 VALUES IN('Vimmerby', 'Hultsfred', 'Västervik'),
PARTITION pRegion_3 VALUES IN('Nässjö', 'Eksjö', 'Vetlanda'),
PARTITION pRegion_4 VALUES IN('Uppvidinge', 'Alvesta', 'Växjo')
);

三、HASH分区

基于⽤户定义的表达式返回值来选择分区,该表达式对要插⼊到表的⾏中列值操做。

PS:表达式必须返回整型数据。

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
)
PARTITION BY HASH(store_id)
PARTITIONS 4;

四、KEY分区

相似HASH分区,可是HASH分区容许使⽤⽤户⾃定义表达式,⽽KEY分区不容许,它须要使⽤ MySQL服务器提供的HASH函数,同时HASH分区只⽀持整数分区,⽽KEY分区⽀持除BLOB和 TEXT类型外其余列。

PS:KEY分区对列数据进⾏hash运算因此有时候数据分布会⾮常不均匀。若是不指定列,mysql会⾃动使⽤主键或者惟⼀健所在的列。

CREATE TABLE k1 (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(20)
)
PARTITION BY KEY()
PARTITIONS 2;
相关文章
相关标签/搜索