- 分区
分区就是将数据库或其构成元素划分为不同的独立部分。
1、分区类型
MySQL 支持多种类型的分区:
• RANGE:范围应该连续但不重叠,使用 VALUES LESS THAN 运算符进行定义。
• LIST:像在由 RANGE 进行分区一样,必须显式定义每个分区。
• HASH:对要插入表中的行的列值进行操作。
• KEY:与 HASH 类似,不同之处在于仅提供要评估的一个或多个列并且 MySQL 服务器提供散列函数。它适用于所有允许的列类型。
• COLUMNS:RANGE 和 LIST 分区上的变体。COLUMNS 分区允许在分区键中使用一个或多个列。在以下情况时将考虑所有这些列:将行放入分区中,以及确定将检查哪些分区来匹配分区删改中的行。
- RANGE COLUMNS 和 LIST COLUMNS 分区支持使用非整数列(以及前面列出的其他数据类型)来定义值范围或列表成员。
• LINEAR:MySQL 还支持线性散列,其不同于常规散列,线性散列使用线性 2 的幂算法,而常规散列使用散列函数值的模。
2.分区支持
(1)确定服务器分区支持状态
mysql> SHOW PLUGINS\G
(2)禁用分区支持
shell> mysqld --skip-partition
3、基本分区语法
通过在 CREATE TABLE 语句中使用 PARTITION BY 子句来创建分区表。PARTITION BY 跟在 CREATE TABLE 的所有部分后面:
CREATE TABLE <table_name> (<table_column_options>)
ENGINE=<engine_name>
PARTITION BY <type> (<partition_expression>);
4、获取分区信息
MySQL 提供了多种方法来确定表的分区状态:
①SHOW CREATE TABLE
查看用于创建分区表的分区子句。
显示用于创建表的语法,包括 PARTITION BY 子句:
show create table orders_range\G
②SHOW TABLE STATUS
确定表是否进行了分区。
③INFORMATION_SCHEMA.PARTITIONS
查询 INFORMATION_SCHEMA.PARTITIONS 表。
可以在 INFORMATION_SCHEMA.PARTITIONS 表中查询分区详细信息。
获取所有数据库表及其分区的列表:
④EXPLAIN PARTITIONS SELECT
显示给定 SELECT 语句使用的分区。
显示 MySQL 处理分区的方式
判断查询将访问哪些分区以及使用这些分区的方式
只能用在包含行数据的表中:
5、更改分区
(1)重新定义分区类型
将 ALTER TABLE 与 PARTITION BY 配合使用,将分
区类型从 RANGE 更改为 HASH:
(2)删除分区
可以删除一个或多个分区。
RANGE 或 LIST 表允许此操作。
将 ALTER TABLE 与 DROP PARTITION 配合使用:
在此 orders_range 表示例中,已经填充了小于10,000 的所有订单 ID,所以将删除第一个分区:
alter table orders_range drop partition p0;
此时查看一下表中的分区p0已经删除
部分内容来自:oracle官方中文版mysql dba学习指南