MYSQL分区表测试

合集下载

mysql性能测试报告

mysql性能测试报告

MySQL性能测试报告1. 引言MySQL是一种开源的关系型数据库管理系统,被广泛应用于Web应用程序的开发中。

在开发过程中,了解MySQL的性能是非常重要的,可以帮助我们优化和调整数据库的配置,以提高系统的响应速度和稳定性。

在本文档中,我们将介绍如何进行MySQL性能测试,并分析测试结果。

2. 测试环境准备在进行性能测试之前,我们需要准备一个合适的测试环境。

以下是一些测试环境准备的步骤:2.1 安装MySQL首先,我们需要安装MySQL数据库。

可以从MySQL官方网站下载安装程序,并按照提示进行安装。

2.2 创建测试数据库在MySQL中,我们可以使用CREATE DATABASE语句创建一个新的数据库,用于存储测试数据。

例如,我们可以使用以下命令创建一个名为testDB的数据库:CREATE DATABASE testDB;2.3 创建测试表在测试数据库中,我们需要创建一个测试表,用于存储测试数据。

可以使用CREATE TABLE语句创建一个新的表。

例如,我们可以使用以下命令创建一个名为testTable的表:CREATE TABLE testTable (id INT PRIMARY KEY,name VARCHAR(100),age INT);2.4 插入测试数据在测试表中,我们需要插入一些测试数据,以模拟真实的数据库负载。

可以使用INSERT INTO语句插入数据。

例如,我们可以使用以下命令插入一条测试数据:INSERT INTO testTable (id, name, age) VALUES (1, 'Alice', 25);3. 性能测试步骤一旦我们准备好了测试环境,就可以开始进行MySQL性能测试了。

以下是一些性能测试的步骤:3.1 选择性能测试工具在进行性能测试之前,我们需要选择一个合适的性能测试工具。

常用的MySQL 性能测试工具有sysbench、mysqlslap等。

Mysql分区表-分区操作

Mysql分区表-分区操作

Mysql分区表-分区操作⼀、查看MySQL是否⽀持分区1、MySQL5.6以及之前版本show variables like '%partition%';2、MySQL5.7show plugins;⼆、分区表的分类与限制1、分区表分类RANGE分区:基于属于⼀个给定连续区间的列值,把多⾏分配给分区。

LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配⼀个离散值集合中的某个值来进⾏选择。

HASH分区:基于⽤户定义的表达式的返回值来进⾏选择的分区,该表达式使⽤将要插⼊到表中的这些⾏的列值进⾏计算。

这个函数可以包含MySQL 中有效的、产⽣⾮负整数值的任何表达式。

KEY分区:类似于按HASH分区,区别在于KEY分区只⽀持计算⼀列或多列,且MySQL服务器提供其⾃⾝的哈希函数。

必须有⼀列或多列包含整数值。

复合分区:在MySQL 5.6版本中,只⽀持RANGE和LIST的⼦分区,且⼦分区的类型只能为HASH和KEY。

2、分区表限制1)分区键必须包含在表的所有主键、唯⼀键中。

2)MYSQL只能在使⽤分区函数的列本⾝进⾏⽐较时才能过滤分区,⽽不能根据表达式的值去过滤分区,即使这个表达式就是分区函数也不⾏。

3)最⼤分区数:不使⽤NDB存储引擎的给定表的最⼤可能分区数为8192(包括⼦分区)。

如果当分区数很⼤,但是未达到8192时提⽰Got error … from storage engine: Out of resources when opening file,可以通过增加open_files_limit系统变量的值来解决问题,当然同时打开⽂件的数量也可能由操作系统限制。

4)不⽀持查询缓存:分区表不⽀持查询缓存,对于涉及分区表的查询,它⾃动禁⽤。

查询缓存⽆法启⽤此类查询。

5)分区的innodb表不⽀持外键。

6)服务器SQL_mode影响分区表的同步复制。

主机和从机上的不同SQL_mode可能会导致sql语句; 这可能导致分区之间的数据分配给定主从位置不同,甚⾄可能导致插⼊主机上成功的分区表在从库上失败。

Mysql分区表及自动创建分区Partition

Mysql分区表及自动创建分区Partition

Mysql分区表及⾃动创建分区PartitionRange分区表建表语句如下,其中分区键必须和id构成主键和唯⼀键CREATE TABLE `test1` (`id` char(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '⾃增主键(guid)',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`partition_key` int(8) NOT NULL COMMENT '分区键(格式:yyyyMMdd)',PRIMARY KEY (`id`,`partition_key`),UNIQUE KEY `id_UNIQUE` (`id`,`partition_key`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ciPARTITION BY RANGE (partition_key)(PARTITION p0 VALUES LESS THAN (20180619) ENGINE = InnoDB,PARTITION p2******* VALUES LESS THAN (20180620) ENGINE = InnoDB,PARTITION p2******* VALUES LESS THAN (20180622) ENGINE = InnoDB,PARTITION p2******* VALUES LESS THAN (20180623) ENGINE = InnoDB,PARTITION p2******* VALUES LESS THAN (20180624) ENGINE = InnoDB);  新增分区alter TABLE `test1` add PARTITION(PARTITION p2******* VALUES LESS THAN (20180630) ENGINE = InnoDB); 删除分区alter table `test1` drop PARTITION p2*******;Mysql不能⾃动创建分区,需要使⽤mysql event事件的⽅式⾃动创建分区1.创建分区的存储过程如下(每次执⾏先校验当前分区是否存在,如果存在则不处理;不存在则创建):DELIMITER $$#该表所在数据库名称USE `demo`$$DROP PROCEDURE IF EXISTS `create_partition_by_day`$$CREATE PROCEDURE `create_partition_by_day`(IN_SCHEMANAME VARCHAR(64), IN_TABLENAME VARCHAR(64))BEGIN#当前⽇期存在的分区的个数DECLARE ROWS_CNT INT UNSIGNED;#⽬前⽇期,为当前⽇期的后⼀天DECLARE TARGET_DATE TIMESTAMP;#分区的名称,格式为p2*******DECLARE PARTITIONNAME VARCHAR(9);#当前分区名称的分区值上限,即为 PARTITIONNAME + 1DECLARE PARTITION_ADD_DAY VARCHAR(9);SET TARGET_DATE = NOW() + INTERVAL 1 DAY;SET PARTITIONNAME = DATE_FORMAT( TARGET_DATE, 'p%Y%m%d' );SET TARGET_DATE = TARGET_DATE + INTERVAL 1 DAY;SET PARTITION_ADD_DAY = DATE_FORMAT( TARGET_DATE, '%Y%m%d' );SELECT COUNT(*) INTO ROWS_CNT FROM information_schema.partitionsWHERE table_schema = IN_SCHEMANAME AND table_name = IN_TABLENAME AND partition_name = PARTITIONNAME;IF ROWS_CNT = 0 THENSET @SQL = CONCAT( 'ALTER TABLE `', IN_SCHEMANAME, '`.`', IN_TABLENAME, '`',' ADD PARTITION (PARTITION ', PARTITIONNAME, " VALUES LESS THAN (",PARTITION_ADD_DAY ,") ENGINE = InnoDB);" );PREPARE STMT FROM @SQL;EXECUTE STMT;DEALLOCATE PREPARE STMT;ELSESELECT CONCAT("partition `", PARTITIONNAME, "` for table `",IN_SCHEMANAME, ".", IN_TABLENAME, "` already exists") AS result; END IF;END$$DELIMITER ; 2.数据库定时任务(每⼩时执⾏⼀次)DELIMITER $$#该表所在的数据库名称USE `demo`$$CREATE EVENT IF NOT EXISTS `daily_generate_partition`ON SCHEDULE EVERY 1 hour #执⾏周期,还有天、⽉等等STARTS '2018-06-20 00:00:00'ON COMPLETION PRESERVEENABLECOMMENT 'Creating partitions'DO BEGIN#调⽤刚才创建的存储过程,第⼀个参数是数据库名称,第⼆个参数是表名称 CALL datacollectcenter.create_partition_by_day('demo','test1');END$$DELIMITER ; 如果没有执⾏,请检查Mysql是否开启了event(默认是关闭的) [mysqld]event_scheduler=ON。

mysql测试题及答案

mysql测试题及答案

mysql测试题及答案MySQL测试题及答案一、选择题1. MySQL的默认端口号是什么?A. 22B. 3306C. 80D. 443答案:B2. 下列哪个SQL语句用于查询表中的所有记录?A. SELECT * FROM table_name WHERE condition;B. SELECT * FROM table_name;C. SELECT table_name.*;D. SELECT ALL FROM table_name;答案:B3. 在MySQL中,以下哪个命令用于创建新的数据库?A. CREATE DATABASE database_name;B. NEW DATABASE database_name;C. START DATABASE database_name;D. INIT DATABASE database_name;答案:A二、填空题4. 在MySQL中,使用____语句可以删除一个表。

答案:DROP TABLE5. 要查看当前MySQL服务器上所有数据库的名称,可以使用____命令。

答案:SHOW DATABASES;6. 以下SQL语句的作用是____:SELECT column1, column2 FROMtable_name WHERE column1 = value1 ORDER BY column2 DESC LIMIT 1;答案:查询表table_name中column1等于value1的记录,并按column2降序排列,返回第一条记录。

三、简答题7. 请简述主键(Primary Key)和外键(Foreign Key)的区别。

答案:主键是表中用于唯一标识每条记录的字段,一个表只能有一个主键,并且主键的值不能为NULL。

外键是表中用于与另一个表的主键建立链接的字段,用于维护两个表之间的数据一致性,一个表可以有多个外键。

8. 解释什么是事务(Transaction)以及它的特性。

如何在MySQL中使用分区表提高查询性能

如何在MySQL中使用分区表提高查询性能

如何在MySQL中使用分区表提高查询性能MySQL是一种常用的关系型数据库管理系统,被广泛应用于各种网站和应用程序中。

在处理大量数据时,查询性能往往是一个关键问题。

为了解决这个问题,MySQL提供了分区表的功能。

本文将探讨如何在MySQL中使用分区表来提高查询性能。

一、什么是分区表?分区表是指将一个大表分割成多个较小的独立的子表。

每个子表称为一个分区,每个分区可以分布在不同的磁盘上。

通过将数据分散存储,可以减少单个表的数据量,从而提高查询性能。

二、为什么使用分区表?1. 提高查询性能:当数据量巨大时,查询操作需要扫描整个表,消耗大量时间和资源。

通过使用分区表,可以将查询操作限定在特定的分区范围内,从而减少查询的数据量,提高查询速度。

2. 简化维护和备份:由于分区表是独立的子表,可以根据需要进行单独的维护和备份操作。

这样可以减少整个表的维护和备份时间,提高系统的可用性。

3. 提高数据处理效率:某些特定的业务场景下,对数据的处理需要按照一定的规则进行分组,如按照时间范围、地理位置等进行分区。

通过使用分区表,可以更加高效地处理这些特定规则的数据。

三、如何创建分区表?在MySQL中,可以通过以下步骤来创建分区表:1. 确定分区键:根据具体的业务需求,选择一个或多个字段作为分区键。

分区键的选择应该依据数据的分布和查询的需求,以确保查询时能够减少数据量。

2. 定义分区函数:根据分区键的选择,定义一个分区函数。

分区函数决定了如何将数据分配到各个分区中。

MySQL提供了一些内置的分区函数,如按照范围、列表、哈希等进行分区。

3. 创建分区表:使用CREATE TABLE语句创建分区表。

在CREATE TABLE语句中,通过PARTITION子句指定分区的定义。

可以指定每个分区的名称、分区函数、分区键等信息。

4. 插入数据:在插入数据时,MySQL会根据分区函数将数据插入到相应的分区中。

可以使用INSERT INTO语句插入数据。

深入解析MySQL分区(Partition)功能

深入解析MySQL分区(Partition)功能

深⼊解析MySQL分区(Partition)功能参考 /tjcyjd/article/details/11194489第18章:分区⽬录18.1. MySQL中的分区概述18.2. 分区类型18.2.1. RANGE分区18.2.2. LIST分区18.2.3. HASH分区18.2.4. KEY分区18.2.5. ⼦分区18.2.6. MySQL分区处理NULL值的⽅式18.3. 分区管理18.3.1. RANGE和LIST分区的管理18.3.2. HASH和KEY分区的管理18.3.3. 分区维护18.3.4. 获取关于分区的信息本章讨论MySQL 5.1.中实现的分区。

关于分区和分区概念的介绍可以在18.1节,“MySQL中的分区概述”中找到。

MySQL 5.1 ⽀持哪⼏种类型的分区,在18.2节,“分区类型” 中讨论。

关于⼦分区在18.2.5节,“⼦分区” 中讨论。

现有分区表中分区的增加、删除和修改的⽅法在18.3节,“分区管理” 中介绍。

和分区表⼀同使⽤的表维护命令在18.3.3节,“分区维护” 中介绍。

请注意:MySQL 5.1中的分区实现仍然很新(pre-alpha品质),此时还不是可⽣产的(not production-ready)。

同样,许多也适⽤于本章:在这⾥描述的⼀些功能还没有实际上实现(分区维护和重新分区命令),其他的可能还没有完全如所描述的那样实现(例如, ⽤于分区的数据⽬录(DATA DIRECTORY)和索引⽬录(INDEX DIRECTORY)选项受到Bug #13520) 不利的影响). 我们已经设法在本章中标出这些差异。

在提出缺陷报告前,我们⿎励参考下⾯的⼀些资源:MySQL 分区论坛这是⼀个为对MySQL分区技术感兴趣或⽤MySQL分区技术做试验提供的官⽅讨论论坛。

来⾃MySQL 的开发者和其他的⼈,会在上⾯发表和更新有关的材料。

它由分区开发和⽂献团队的成员负责监控。

MySQLPartitionTable--分区表优缺点

MySQLPartitionTable--分区表优缺点

MySQLPartitionTable--分区表优缺点分区表历史1、MySQL 5.1版本开始⽀持基于整数列的分区表,2、MySQL 5.5版本开始⽀持RANGE和LIST分区,⽀持TRUNCATE分区,新增COLUMNS关键词简化分区定义。

3、MySQL 5.6版本开始⽀持分区交换,⽀持显式分区查询,⽀持最⼤8182个分区或⼦分区。

4、MySQL 5.7版本引⼊本地分区策略,并标记弃⽤通⽤分区策略。

分区策略按照管理打开分区的⾏为可以将分区策略分为两类:1、通⽤分区策略(Generic Partitioning), 由MySQL Server层负责控制访问分区。

2、本地分区策略(Native Partitioning),由存储引擎层负责控制访问分区。

在MySQL开始⽀持分区表时,将分区表访问控制操作放在MySQL Server层实现,由于在⽂件管理/表管理等⽅⾯实现较为粗糙,存在严重性能问题。

⽽不同存储引擎层使⽤不同存储机制/索引结构/访问控制(锁),可以通过特殊设计来提升或优化特定的通⽤分区策略问题:1、当分区表第⼀次被访问时,⽆论该次访问需要操作多少个分区,都需要访问该分区表上所有分区,导致性能问题。

当分区表上分区数量较⼤时,可能会因为打开⽂件数量超过参数open_file_limit限制⽽出错。

2、在对分区表进⾏维护时,需要同时维护原分区⽂件和新分区⽂件,如将分区表由100分区扩展⾄101分区时,需要2*100+2*101=402个⽂件描述符。

在MySQL 5.7.9版本中,InnoDB引⼊本地分区策略,由InnoDB存储引擎层内部管理访问分区表⾏为。

在MySQL 5.7.17版本中,MySQL将通⽤分区策略标记为弃⽤在MySQL 8.0版本,不再允许MyISAM引擎使⽤分区表,因为MyISAM引擎不⽀持本地分区策略。

⽬前仅有InnoDB和NDB两种存储引擎⽀持本地分区策略。

MySQL 5.7分区增强MySQL 5.7分区增强:1、MySQL 5.7.1开始⽀持HANDLER语句(⾮标准SQL语句,不⽀持DML操作,通过指定索引来访问数据,降低优化器解析和优化SQL的开销,提升查询性能。

MySQL基于时间字段进行分区的方案总结

MySQL基于时间字段进行分区的方案总结

MySQL基于时间字段进⾏分区的⽅案总结MySQL⽀持的分区类型⼀共有四种:RANGE,LIST,HASH,KEY。

其中,RANGE⼜可分为原⽣RANGE和RANGE COLUMNS,LIST 分为原⽣LIST和LIST COLUMNS,HASH分为原⽣HASH和LINEAR HASH,KEY包含原⽣KEY和LINEAR HASH。

关于这些分区之间的差别,改⽇另写⽂章进⾏阐述。

最近,碰到⼀个需求,要对表的时间字段(类型:datetime)基于天进⾏分区。

于是遍历MySQL官⽅⽂档分区章节,总结如下:实现⽅式主要是以下⼏种:1. 基于RANGE2. 基于RANGE COLUMNS3. 基于HASH测试数据为了测试以上三种⽅案,特构造了100万的测试数据,放在test表中,test表只有两列:id和hiredate,其中hiredate只包含10天的数据,从2015-12-01到2015-12-10。

具体信息如下:mysql> show create table test\G*************************** 1. row ***************************Table: testCreate Table: CREATE TABLE `test` (`id` int(11) DEFAULT NULL,`hiredate` datetime DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin11 row in set (0.00 sec)mysql> select min(hiredate),max(hiredate) from test;+---------------------+---------------------+| min(hiredate) | max(hiredate) |+---------------------+---------------------+| 2015-12-01 00:00:00 | 2015-12-10 23:59:56 |+---------------------+---------------------+1 row in set (0.44 sec)mysql> select date(hiredate),count(*) from test group by date(hiredate);+----------------+----------+| date(hiredate) | count(*) |+----------------+----------+| 2015-12-01 | 99963 || 2015-12-02 | 100032 || 2015-12-03 | 100150 || 2015-12-04 | 99989 || 2015-12-05 | 99908 || 2015-12-06 | 99897 || 2015-12-07 | 100137 || 2015-12-08 | 100171 || 2015-12-09 | 99851 || 2015-12-10 | 99902 |+----------------+----------+10 rows in set (0.98 sec)测试的维度测试的维度主要从两个⽅⾯进⾏,⼀、分区剪裁针对特定的查询,是否能进⾏分区剪裁(即只查询相关的分区,⽽不是所有分区)⼆、查询时间鉴于该批测试数据是静⽌的(即没有并发进⾏的insert,update和delete操作),数据量也不太⼤,从这个维度来考量貌似意义也不是很⼤。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MYSQL分区表测试MYSQL分区表测试一、mysql分区简介数据库分区数据库分区是一种物理数据库设计技术。

虽然分区技术可以实现很多效果,但其主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减sql语句的响应时间,同时对于应用来说分区完全是透明的。

MYSQL的分区主要有两种形式:水平分区和垂直分区水平分区(Horizontal Partitioning)这种形式的分区是对根据表的行进行分区,通过这样的方式不同分组里面的物理列分割的数据集得以组合,从而进行个体分割(单分区)或集体分割(1个或多个分区)。

所有在表中定义的列在每个数据集中都能找到,所以表的特性依然得以保持。

水平分区一定要通过某个属性列来分割。

常见的比如年份,日期等。

垂直分区(Vertical Partitioning)这种分区方式一般来说是通过对表的垂直划分来减少目标表的宽度,使某些特定的列被划分到特定的分区,每个分区都包含了其中的列所对应所有行。

可以用show variables like '%partition%';命令查询当前的mysql数据库版本是否支持分区。

分区的作用:数据库性能的提升和简化数据管理在扫描操作中,mysql优化器只扫描保护数据的那个分区以减少扫描范围获得性能的提高。

分区技术使得数据管理变得简单,删除某个分区不会对另外的分区造成影响,分区有系统直接管理不用手工干预。

mysql从5.1版本开始支持分区。

每个分区的名称是不区分大小写。

同个表中的分区表名称要唯一。

二、mysql分区类型根据所使用的不同分区规则可以分成几大分区类型。

RANGE 分区:基于属于一个给定连续区间的列值,把多行分配给分区。

LIST 分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。

HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。

这个函数可以包含MySQL中有效的、产生非负整数值的任何表达式。

KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。

必须有一列或多列包含整数值。

复合分区:基于RANGE/LIST 类型的分区表中每个分区的再次分割。

子分区可以是HASH/KEY 等类型。

三、mysql分区表常用操作示例以部门员工表为例子:1) 创建range分区create table emp(empno varchar(20) not null ,empname varchar(20),deptno int,birthdate date,salary int)partition by range(salary)(partition p1 values less than (1000),partition p2 values less than (2000),partition p3 values less than maxvalue);以员工工资为依据做范围分区。

create table emp(empno varchar(20) not null ,empname varchar(20),deptno int,birthdate date not null,salary int)partition by range(year(birthdate))(partition p1 values less than (1980),partition p2 values less than (1990),partition p3 values less than maxvalue);以year(birthdate)表达式(计算员工的出生日期)作为范围分区依据。

这里最值得注意的是表达式必须有返回值。

2) 创建list分区(empno varchar(20) not null ,empname varchar(20),deptno int,birthdate date not null,salary int)partition by list(deptno)(partition p1 values in (10),partition p2 values in (20),partition p3 values in (30));以部门作为分区依据,每个部门做一分区。

3) 创建hash分区HASH分区主要用来确保数据在预先确定数目的分区中平均分布。

在RANGE和LIST分区中,必须明确指定一个给定的列值或列值集合应该保存在哪个分区中;而在HASH分区中,MySQL 自动完成这些工作,你所要做的只是基于将要被哈希的列值指定一个列值或表达式,以及指定被分区的表将要被分割成的分区数量。

(empno varchar(20) not null ,empname varchar(20),deptno int,birthdate date not null,salary int)partition by hash(year(birthdate))partitions 4;4) 创建key分区按照KEY进行分区类似于按照HASH分区,除了HASH分区使用的用户定义的表达式,而KEY分区的哈希函数是由MySQL 服务器提供,服务器使用其自己内部的哈希函数,这些函数是基于与PASSWORD()一样的运算法则。

“CREATE TABLE ... PARTITION BY KEY”的语法规则类似于创建一个通过HASH分区的表的规则。

它们唯一的区别在于使用的关键字是KEY而不是HASH,并且KEY分区只采用一个或多个列名的一个列表。

create table emp(empno varchar(20) not null ,empname varchar(20),deptno int,birthdate date not null,salary int)partition by key(birthdate) partitions 4;5) 创建复合分区range - hash(范围哈希)复合分区create table emp(empno varchar(20) not null , empname varchar(20),deptno int,birthdate date not null,salary int)partition by range(salary) subpartition by hash(year(birthdate)) subpartitions 3(partition p1 values less than (2000), partition p2 values less than maxvalue );range- key复合分区create table emp(empno varchar(20) not null , empname varchar(20),deptno int,birthdate date not null,salary int)partition by range(salary) subpartition by key(birthdate) subpartitions 3(partition p1 values less than (2000), partition p2 values less than maxvalue );list - hash复合分区CREATE TABLE emp (empno varchar(20) NOT NULL,empname varchar(20) ,deptno int,birthdate date NOT NULL,salary int)PARTITION BY list (deptno) subpartition by hash(year(birthdate)) subpartitions 3(PARTITION p1 V ALUES in (10), PARTITION p2 V ALUES in (20) );list - key 复合分区CREATE TABLE empk (empno varchar(20) NOT NULL, empname varchar(20) ,deptno int,birthdate date NOT NULL,salary int)PARTITION BY list (deptno)subpartition by key(birthdate)subpartitions 3(PARTITION p1 V ALUES in (10),PARTITION p2 V ALUES in (20));6) 分区表的管理操作删除分区:alter table emp drop partition p1;不可以删除hash或者key分区。

一次性删除多个分区,alter table emp drop partition p1,p2;增加分区:alter table emp add partition (partition p3 values less than (4000));alter table empl add partition (partition p3 values in (40));分解分区:Reorganize partition关键字可以对表的部分分区或全部分区进行修改,并且不会丢失数据。

分解前后分区的整体范围应该一致。

alter table tereorganize partition p1 into(partition p1 values less than (100),partition p3 values less than (1000)); ----不会丢失数据合并分区:Merge分区:把2个分区合并为一个。

alter table tereorganize partition p1,p3 into(partition p1 values less than (1000));----不会丢失数据重新定义hash分区表:Alter table emp partition by hash(salary) partitions 7; ----不会丢失数据重新定义range分区表:Alter table emp partition by range(salary)(partition p1 values less than (2000),partition p2 values less than (4000)); ----不会丢失数据删除表的所有分区:Alter table emp remove partitioning;--不会丢失数据重建分区:这和先删除保存在分区中的所有记录,然后重新插入它们,具有同样的效果。

相关文档
最新文档