创建,增加,删除mysql表分区

1.测试添加分区和删除分区
###添加删除range分区
(1)创建一个分区:
CREATE TABLE titles (
    emp_no      INT NOT NULL,
    title       VARCHAR(50)     NOT NULL,
    from_date   DATE            NOT NULL,
    to_date     DATE,
    KEY         (emp_no),
    PRIMARY KEY (emp_no,title, from_date)
) partition by range columns(from_date)
(partition p01 values less than (‘1985-12-31‘),
partition p02 values less than (‘1990-12-31‘),
partition p03 values less than (‘1995-12-31‘),
partition p04 values less than (‘2000-12-31‘),
partition p05 values less than (‘2005-12-31‘),
partition p06 values less than (‘2010-12-31‘),
partition p07 values less than (‘2015-12-31‘),
partition p08 values less than (‘2020-12-31‘),
partition p09 values less than (‘2025-12-31‘),
partition p10 values less than (‘2030-12-31‘)
);
导入数据
mysql> source titles.sql

(2)添加分区:
备注:不能超过p04的范围,严格递增每个分区,即最小不能小于前一个分区
下面新曾了两个分区n01和n02
 alter table titles
 reorganize partition p04 into(
 partition n01 values less than(‘1997-12-31‘),
 partition n02 values less than(‘1998-12-31‘),
 partition p04 values less than(‘2000-12-31‘)
 );

(3)删除分区:
删除分区即删除数据。
mysql> select count(*) from titles where from_date<‘1985-12-31‘;
+----------+
| count(*) |
+----------+
|    18238 |
+----------+
1 row in set (0.09 sec)

mysql> alter table titles drop partition p01;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> select count(*) from titles where from_date<‘1985-12-31‘;
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.04 sec)

###添加删除list分区
(1)创建list分区
CREATE TABLE titles (
    emp_no      INT NOT NULL,
    title       VARCHAR(50)     NOT NULL,
    from_date   DATE            NOT NULL,
    to_date     DATE,
    KEY         (emp_no),
    PRIMARY KEY (emp_no,title, from_date)
) partition by list columns(title)
(
partition p0 values in (‘Assistant Engineer‘),
partition p1 values in (‘Engineer‘),
partition p2 values in (‘Manager‘),
partition p3 values in (‘Senior Engineer‘),
partition p4 values in (‘Senior Staff‘),
partition p5 values in (‘Staff‘),
partition p6 values in (‘Technique Leader‘)
);
导入数据
titles.sql 是employees数据库导出的数据
mysql> source titles.sql

(2)添加分区
mysql> alter table titles add partition(partition p7 values in(‘CEO‘));
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

(3)删除分区:
mysql> alter table titles drop partition p0;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

###添加删除hash分区
(1)创建hash分区
CREATE TABLE titles (
    emp_no      INT NOT NULL,
    title       VARCHAR(50)     NOT NULL,
    from_date   DATE            NOT NULL,
    to_date     DATE,
    KEY         (emp_no),
    PRIMARY KEY (emp_no,title, from_date)
) partition by hash(emp_no)
partitions 4;
导入数据:
mysql> source titles.sql

(2)删除hash分区
4个分区减少到两个,4-2=2
mysql> alter table titles coalesce partition 2;
Query OK, 443308 rows affected (12.41 sec)
Records: 443308  Duplicates: 0  Warnings: 0

(3)添加hash分区
增加到5个,2+3=5
mysql> alter table titles add partition partitions 3;
Query OK, 443308 rows affected (11.54 sec)
Records: 443308  Duplicates: 0  Warnings: 0

###添加删除key分区
(1)创建key分区
CREATE TABLE titles (
    emp_no      INT NOT NULL,
    title       VARCHAR(50)     NOT NULL,
    from_date   DATE            NOT NULL,
    to_date     DATE,
    KEY         (emp_no),
    PRIMARY KEY (emp_no,title, from_date)
) partition by key(emp_no)
partitions 4;
导入数据
mysql> source titles.sql

(2)删除分区,同hash
mysql> alter table titles coalesce partition 2;
Query OK, 443308 rows affected (7.86 sec)
Records: 443308  Duplicates: 0  Warnings: 0

(3)添加分区,同hash
mysql> alter table titles add partition partitions 3;
Query OK, 443308 rows affected (6.17 sec)
Records: 443308  Duplicates: 0  Warnings: 0
时间: 2024-11-06 12:16:16

创建,增加,删除mysql表分区的相关文章

MySql表分区(根据时间datetime)

timestamp 类型分区请移步=>MySql表分区(根据时间timestamp)环境: MySql8.0.18(5.6和5.7的未验证) 分区条件的字段类型是datetime完整的sql操作表分区的语句如下: -- 1.删除表 drop table t_test; -- =================================================================================== -- 2.创建一个表并对其分区,被创建分区的字段必须为主

查看Mysql表分区语句

SELECT partition_name part, partition_expression expr, partition_description descr, table_rows FROM INFORMATION_SCHEMA.partitions WHERE TABLE_SCHEMA = schema() AND TABLE_NAME='table'; 查看Mysql表分区语句

Mysql 表分区和性能

以下内容节选自<Mysql技术内幕InnoDB存储引擎> mysql表分区: 分区功能并不是所有存储引擎都支持的,如CSV.MERGE等就不支持.mysql数据库支持的分区类型为水平分区(指一张表中不同行的记录分配到不同的物理文件中),不支持垂直分区(指将同一表中的不同列分配到不同的物理文件中).此外,mysql数据库的分区是局部分区索引,一个分区中既存放了数据又存放了索引. 当前Mysql数据库支持以下几种类型的分区: Range分区:行数据基于一个给定连续区间的列值放入分区.Mysql数据

mysql表分区、查看分区

原文地址:http://blog.csdn.net/feihong247/article/details/7885199 一.       mysql分区简介 数据库分区 数据库分区是一种物理数据库设计技术.虽然分区技术可以实现很多效果,但其主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减sql语句的响应时间,同时对于应用来说分区完全是透明的. MYSQL的分区主要有两种形式:水平分区和垂直分区 水平分区(HorizontalPartitioning) 这种形式的分区是对根据表的行进行

mysql 表分区技术

表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分.从逻辑上看,只有一张表,但是底层却是由多个物理分区组成. 表分区有什么好处: a.分区表的数据可以分布在不同的物理设备上,从而高效地利用多个硬件设备. b.和单个磁盘或者文件系统相比,可以存储更多数据 c.优化查询.在where语句中包含分区条件时,可以只扫描一个或多个分区表来提高查询效率:涉及sum和count语句时,也可以在多个分区上并行处理,最后汇总结果.d.分区表更容易维护.例如:想批量删除大量数据可以清除整个

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

一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区.当然也可根据其他的条件分区. 二.为什么要对表进行分区为了改善大型表以及具有各种访问模式的表的可伸缩性,可管理性和提高数据库效率. 分区的一些优点包括: 与单个磁盘或文件系统分区相比,可以存储更多的数据.对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,很容易地删除那些数据.相

MySQL 表分区详解

一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了.如:某用户表的记录超过了1000万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区.当然也可根据其他的条件分区. 二.为什么要对表进行分区为了改善大型表以及具有各种访问模式的表的可伸缩性,可管理性和提高数据库效率.分区的一些优点包括:      1).与单个磁盘或文件系统分区相比,可以存储更多的数据.      2).对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关

Mysql表分区几种方式

自5.1开始对分区(Partition)有支持,一张表最多1024个分区 查询分区数据: SELECT * from table PARTITION(p0) = 水平分区(根据列属性按行分)= 举个简单例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录. === 水平分区的几种模式:=== * Range(范围) – 这种模式允许DBA将数据划分不同范围.例如DBA可以将一个表通过年份划分成三个分区,80年代(1980's)的数据,90年代(1990's)的

MYSQL 表分区的 3 方法

背景知识: 表分区是把逻辑上同一范围的数据保存到同一个文件中,就和超市一样,把同类商品放在同一个区域,把不同的商品放在不同的地方.不同的是超市中 是根据用途分类的,表分区是根据它的取值区间来分的. 分区有什么用? 1.分区后可以用多个文件来保存表中的数据,而这几个文件可以位于不同的硬盘上,这样就可以同时利用多个硬盘的IO能力. 2.分区后锁就会更灵活,如果一次要锁定大量的数据行,而表没有分区,MYSQL 可能会为了减小在锁上的开销,会把行锁升 级为表锁,如果表分区了,要访问的数据行只在表的一两个