MySQL表分区

合集下载

mysql partition用法

mysql partition用法

mysql partition用法MySQL 分区是一种用于将表数据拆分成更小、更易管理的部分的技术。

分区可以提高查询性能、简化维护,并支持更高的数据量。

以下是 MySQL 分区的基本用法和示例:1. 创建分区表:sqlCopy codeCREATE TABLE your_table (id INT,name VARCHAR(50),date_column DATE) PARTITION BY RANGE (YEAR(date_column)) (PARTITION p0 VALUES LESS THAN (1991),PARTITION p1 VALUES LESS THAN (1995),PARTITION p2 VALUES LESS THAN (1999),PARTITION p3 VALUES LESS THAN MAXVALUE);上述示例创建了一个分区表 your_table,按照 date_column 列中的年份进行范围分区。

您可以根据不同的列和分区策略进行设置。

2. 分区策略:MySQL 支持多种分区策略,包括 RANGE、LIST、HASH 等。

上述示例使用的是 RANGE 分区,根据日期列中的年份进行范围分区。

您可以根据具体情况选择适合的分区策略。

3. 插入数据:sqlCopy codeINSERT INTO your_table (id, name, date_column) VALUES (1, 'John', '1990-01-15');向分区表插入数据的语法与常规表类似。

4. 查询分区表:sqlCopy codeSELECT * FROM your_table WHERE date_column BETWEEN '1995-01-01' AND '1999-12-31';查询分区表的语法也与常规表相似。

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之表分区----按日期分区

MYSQL之表分区----按日期分区

MYSQL之表分区----按⽇期分区MYSQL之表分区----按⽇期分区于 2015-07-16 14:23:38 发布40948收藏 16错误的按⽇期分区例⼦最直观的⽅法,就是直接⽤年⽉⽇这种⽇期格式来进⾏常规的分区:PLAIN TEXTCODE:1.mysql> create table rms (d date)2.-> partition by range (d)3.-> (partition p0 values less than ('1995-01-01'),4.-> partition p1 VALUES LESS THAN ('2010-01-01'));上⾯的例⼦中,就是直接⽤"Y-m-d"的格式来对⼀个table进⾏分区,可惜想当然往往不能奏效,会得到⼀个错误信息: ERROR 1064 (42000): VALUES value must be of same type as partition function near '),partition p1 VALUES LESS THAN ('2010-01-01'))' at line 3上述分区⽅式没有成功,⽽且明显的不经济,⽼练的DBA会⽤整型数值来进⾏分区:PLAIN TEXTCODE:1.mysql> CREATE TABLE part_date12.-> ( c1 int default NULL,3.-> c2 varchar(30) default NULL,4.-> c3 date default NULL) engine=myisam5.-> partition by range (cast(date_format(c3,'%Y%m%d') as signed))6.-> (PARTITION p0 VALUES LESS THAN (19950101),7.-> PARTITION p1 VALUES LESS THAN (19960101) ,8.-> PARTITION p2 VALUES LESS THAN (19970101) ,9.-> PARTITION p3 VALUES LESS THAN (19980101) ,10.-> PARTITION p4 VALUES LESS THAN (19990101) ,11.-> PARTITION p5 VALUES LESS THAN (20000101) ,12.-> PARTITION p6 VALUES LESS THAN (20010101) ,13.-> PARTITION p7 VALUES LESS THAN (20020101) ,14.-> PARTITION p8 VALUES LESS THAN (20030101) ,15.-> PARTITION p9 VALUES LESS THAN (20040101) ,16.-> PARTITION p10 VALUES LESS THAN (20100101),-> PARTITION p11 VALUES LESS THAN MAXVALUE );Query OK, 0 rows affected (0.01 sec)搞定?接着往下分析PLAIN TEXTCODE:1.mysql> explain partitions2.-> select count(*) from part_date1 where3.-> c3> '1995-01-01' and c3 <'1995-12-31'\G4.*************************** 1. row ***************************5.id: 16.select_type: SIMPLE7.table: part_date18.partitions: p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p119.type: ALL10.possible_keys: NULL11.key: NULL12.key_len: NULL13.ref: NULL14.rows: 810000015.Extra: Using where16.1 row in set (0.00 sec)万恶的mysql居然对上⾯的sql使⽤全表扫描,⽽不是按照我们的⽇期分区分块查询。

MySQL中的表分区和数据归档策略

MySQL中的表分区和数据归档策略

MySQL中的表分区和数据归档策略引言MySQL是当前最流行的关系型数据库管理系统之一,它提供了丰富的功能和灵活的配置选项。

其中,表分区和数据归档策略是优化数据库性能和管理大量数据的重要手段之一。

本文将介绍MySQL中的表分区和数据归档策略,探讨其原理、用途和实施方法。

一、表分区的原理和用途表分区是将大表拆分成多个较小的部分,每个部分称为一个分区。

这样做的好处有很多。

首先,表分区可以提高查询性能。

当数据库中存在大量数据时,查询整个表会耗费大量的时间和系统资源。

而通过表分区,可以将数据分散在多个磁盘上,实现并行查询,从而提高查询速度。

其次,表分区可以加快数据的插入和删除。

对于大量数据的插入和删除操作,如果没有表分区,会导致整个表上锁,影响并发性能。

而通过表分区,可以将插入和删除操作分散在多个分区上,从而减轻锁的压力,提高并发性能。

此外,表分区还可用于数据归档和备份等用途。

二、表分区的实施方法在MySQL中,表分区可以通过以下几种方式实施。

1. 范围分区:按照指定的范围对表进行分区,例如按照时间范围(年、月、日)或者数值范围(价格、数量)等。

这种分区适用于根据某一维度对数据进行查询和归档的场景。

2. 列表分区:按照指定的列表对表进行分区,例如按照城市、部门、客户等列的取值进行分区。

这种分区适用于根据多个维度对数据进行查询和归档的场景。

3. 哈希分区:按照哈希函数对表进行分区,将数据均匀地分散在多个分区中。

这种分区适用于大量均匀分散的数据,可以提高查询性能和负载均衡。

4. 手动分区:手动指定每个分区的范围或者列表,灵活性较高。

三、数据归档的原理和用途数据归档是将不经常访问或者过期的数据从活跃表中迁移到归档表或者归档文件中的过程。

数据归档的好处有很多。

首先,归档可以提高活跃表的查询性能。

在实际应用中,很多数据是不经常访问的,而这些数据占用了大量的存储空间和系统资源。

通过归档可以将这些不经常访问的数据转移到归档表或者归档文件中,从而减少活跃表的大小,提高查询性能。

MySQL中的表分区和索引选择优化建议

MySQL中的表分区和索引选择优化建议

MySQL中的表分区和索引选择优化建议在大数据时代的背景下,数据库的性能和优化变得越发重要。

MySQL作为最流行的开源数据库管理系统之一,在数据分析与存储方面扮演着重要的角色。

在MySQL中,表分区和索引选择是优化数据库性能的两个关键因素。

本文将探讨MySQL中的表分区和索引选择,并给出优化建议。

一、表分区的概述表分区是将一张表划分为多个较小的独立部分,每个部分可以存储在不同的物理位置上。

表分区的主要目的是提高查询和维护的性能。

通过将数据分布在多个分区上,可以减少查询的数据量,并且可以针对每个分区进行独立的维护操作。

在选择表分区的策略时,应该考虑数据的特点和查询模式。

以下是一些建议:1. 按范围分区:根据数据的范围进行分区,在每个分区上存储数据的范围是连续的。

这种分区策略适用于按照时间或者连续的数值范围进行查询的场景。

2. 按列表分区:按照某个字段的固定值进行分区,在每个分区上存储的数据具有相同的特征。

这种分区策略适用于按照某个字段值进行查询的场景。

3. 按哈希分区:根据某个字段的哈希值进行分区。

这种分区策略适用于需要将数据均匀分布在不同分区上的场景。

二、索引选择的优化索引是提高数据库查询效率的关键。

选择合适的索引可以大大加快查询的速度,并减少数据库的资源消耗。

以下是一些建议:1. 唯一索引:在表中选择合适的字段创建唯一索引。

唯一索引可以确保数据的唯一性,并且加快查询速度。

通常,在主键或者唯一标识的字段上创建唯一索引是一个明智的选择。

2. 组合索引:对于频繁同时查询多个字段的操作,可以考虑创建组合索引。

组合索引可以减少磁盘I/O次数和内存消耗。

3. 索引覆盖:尽量减少全表扫描,保证使用索引能够满足查询的需求。

使用索引覆盖可以减少数据库的资源消耗。

4. 索引统计信息:及时更新索引的统计信息。

MySQL提供了ANALYZE TABLE或者OPTIMIZE TABLE命令来更新索引的统计信息,确保数据库的查询优化器能够选择合适的索引进行查询。

使用MySQL进行数据分区的技巧和方法

使用MySQL进行数据分区的技巧和方法

使用MySQL进行数据分区的技巧和方法引言:随着数据量的不断增加,数据库的性能和扩展性成为了许多企业和开发者关注的焦点。

MySQL作为一种常见的关系型数据库管理系统,其提供了数据分区的功能,可以帮助提升数据库的性能和管理效率。

本文将介绍使用MySQL进行数据分区的一些技巧和方法。

1. 什么是数据分区数据分区是将一个大型数据库表拆分为多个小表的过程。

每个小表称为一个分区,它们可以分别存储在不同的物理设备上,或者是分别存储在同一个设备的不同目录中。

通过将数据分散到不同的分区中,可以提高查询性能、写入性能和管理效率。

2. MySQL的数据分区类型MySQL支持以下几种数据分区类型:- 范围分区:按照某个列的范围将数据分区,例如按照订单的时间范围进行分区。

- 列表分区:按照某个列的值列表进行分区,例如按照地区列表将数据分区。

- 哈希分区:按照某个列的哈希值进行分区,例如按照用户ID的哈希值将数据分区。

- 键分区:按照某个列的键值进行分区,例如按照用户ID进行分区。

3. 数据分区的优点- 提高查询性能:将数据分散到多个分区中,可以并行查询多个分区,从而提高查询性能。

- 提高写入性能:将数据分散到多个分区中,可以并行写入多个分区,从而提高写入性能。

- 管理效率:可以根据业务需求对每个分区进行独立的维护和管理,提高管理效率。

4. 如何选择数据分区的列选择合适的列进行数据分区是非常重要的。

一般来说,选择范围广泛且经常使用的列作为分区的列是比较合适的。

以订单表为例,可以选择按照订单的时间范围进行分区,因为根据时间范围查询订单是非常常见的操作。

5. 如何进行数据分区以下是使用MySQL进行数据分区的基本步骤:- 创建表时指定分区方式:在创建表时,可以通过PARTITION BY子句指定分区方式和列。

- 定义分区规则:根据选择的分区方式和列,定义具体的分区规则,例如范围分区可以定义每个分区的时间范围。

- 执行分区操作:在创建表后,可以使用ALTER TABLE语句执行分区操作,将已有数据按照分区规则进行重新分区。

如何处理MySQL中的表分区与数据切割

如何处理MySQL中的表分区与数据切割引言:MySQL作为一种开源的关系型数据库管理系统,被广泛应用于各个领域。

在大数据时代的背景下,数据库的性能和可扩展性成为了关注的焦点。

为了提高数据库的查询速度和管理效率,表分区和数据切割成为了一种常见的技术手段。

本文将介绍如何使用MySQL进行分区和切割数据的方法和注意事项,以帮助读者更好地运用这一技术。

一、表分区的概念和作用表分区是一种将大型表拆分成较小的、独立管理的逻辑部分的方法。

通过对表进行逻辑或物理上的分割,可以将数据分散存储在不同的磁盘上,提高查询性能和数据管理的效率。

1.1 逻辑分区逻辑分区是指将表按照一定的规则进行逻辑上的分割,使得不同分区的数据能够独立查询和管理。

比如,可以按照时间、地理位置、用户ID等进行逻辑分区,以满足不同业务需求。

1.2 物理分区物理分区是指将表按照物理设备进行划分,将不同分区的数据存储在不同的磁盘上。

通过将数据分散存储,可以提高查询性能和负载均衡。

1.3 作用表分区可以提高查询性能,通过只查询相关分区的数据,减少了查询范围,加快了查询速度。

同时,通过分区的管理可以提高数据管理的效率,比如可以独立进行备份和恢复操作,减少数据维护的复杂性。

二、表分区的实现方法MySQL支持多种类型的表分区方法,本节将介绍其中比较常见的几种方法,并分析其优缺点。

2.1 范围分区范围分区是根据某个字段的范围将表进行分割,比如按照日期将订单表进行分区。

通过指定分区键的范围,可以将不同时间段内的数据存储在不同的分区中。

优点:适用于按时间或其他范围进行分区,数据查询效率高。

可以根据业务需求进行动态的添加和删除分区。

缺点:需要提前规划好范围和分区键,分区键的选择对查询性能有很大影响。

而且不太适用于数据更新频繁的情况,因为更新数据可能需要涉及多个分区。

2.2 列表分区列表分区是根据某个字段的离散值将表进行分割,比如按照地理位置将用户表进行分区。

通过指定分区键的值,可以将具有相同值的数据存储在同一个分区中。

mysql分区建立方式

mysql分区建立方式MySQL分区是一种将表按照特定的规则划分为多个分区的技术。

通过对表进行分区,可以提高查询性能、简化数据维护和管理操作,并增强数据的安全性。

下面将介绍MySQL分区的建立方式。

1. 范围分区(RANGE)范围分区是按照某个列的范围值进行分区的方式。

可以根据日期、数字、字符等类型的列进行范围分区。

例如,可以根据日期列将表分为每个月一个分区,或者根据数字列将表分为每个区间一个分区。

2. 列表分区(LIST)列表分区是按照某个列的离散值进行分区的方式。

可以根据列中的具体值将表分为多个分区。

例如,可以根据地区列将表分为不同的地区分区。

3. 哈希分区(HASH)哈希分区是根据哈希算法对某列的值进行计算,然后将表分为多个分区。

哈希分区可以均匀地将数据分布到不同的分区中,提高查询性能。

但是,哈希分区不支持范围查询。

4. 列分区(COLUMNS)列分区是MySQL 8.0版本引入的新功能,可以将表按照多个列的组合进行分区。

列分区可以更灵活地对表进行分区,并且可以根据多个列进行范围、列表或哈希分区。

5. 子分区子分区是在已经存在的分区上再进行分区。

可以在已经分区的分区上继续进行范围、列表、哈希或列分区,从而形成更细粒度的分区。

6. 分区策略分区策略是指根据什么规则对表进行分区。

可以根据范围、列表、哈希或列来选择分区策略。

选择合适的分区策略是提高查询性能的关键。

7. 分区键分区键是用来进行分区的列,分区键的选择非常重要。

应该选择具有高选择性的列作为分区键,以确保数据均匀地分布到各个分区中。

8. 分区数分区数是指将表分为多少个分区。

分区数应该根据数据量和查询需求进行合理的选择。

分区数过少可能导致数据不均匀,分区数过多可能导致管理和维护的复杂性增加。

9. 分区管理和维护分区表的管理和维护操作与普通表类似,但需要注意特定的分区操作。

例如,可以使用ALTER TABLE语句对分区进行添加、删除、合并、拆分等操作。

mysql分区表的底层原理

MySQL分区表的底层原理是将一个大表分成多个小表,每个小表称为一个分区。

分区表可以根据某个列的值进行划分,也可以根据范围、哈希值等进行划分。

分区表的主要目的是提高查询性能和管理效率。

分区表的底层实现主要依赖于MySQL服务器的分区管理模块。

当创建分区表时,MySQL会创建一个主表和一个或多个子表。

主表存储了所有分区的信息,而子表则存储了实际的数据。

当插入数据时,MySQL会根据分区键的值将数据插入到相应的子表中。

查询数据时,MySQL 会根据查询条件确定需要访问的子表,从而提高查询性能。

分区表的底层原理涉及到以下几个关键概念:
1. 分区键:用于划分分区的列,可以是单个列或多个列的组合。

2. 分区类型:根据分区键的不同划分方式,常见的分区类型有RANGE、LIST、HASH和KEY 等。

3. 分区策略:定义了如何根据分区键的值将数据分配到各个分区中的策略。

常见的分区策略有RANGE COLUMNS、LIST COLUMNS、HASH COLUMNS和KEY COLUMNS等。

4. 分区引擎:负责管理分区表的存储和查询操作的组件。

MySQL支持多种分区引擎,如MyISAM、InnoDB和NDB等。

5. 分区索引:在分区表上创建的索引,可以是一个全局索引或局部索引。

全局索引在整个主表上创建,而局部索引只在特定的分区上创建。

总之,MySQL分区表的底层原理是通过将一个大表划分为多个小表,并根据分区键和分区策略将数据分配到各个子表中,以提高查询性能和管理效率。

mysql表分区实现方法

mysql表分区实现方法一、MySQL表分区概述MySQL表分区是指将一个大表拆分成多个较小的分区(partition),每个分区存储不同的数据子集。

通过将数据分散到不同的分区中,可以提高查询性能、简化数据管理和提高可用性。

二、MySQL表分区方法MySQL提供了多种表分区方法,常用的包括:范围分区、列表分区、哈希分区和键值分区。

1. 范围分区(Range Partitioning):根据指定的范围值将数据分区,例如按时间范围分区。

2. 列表分区(List Partitioning):根据指定的值列表将数据分区,例如按地区或部门分区。

3. 哈希分区(Hash Partitioning):根据哈希算法将数据分区,例如根据用户ID进行哈希分区。

4. 键值分区(Key Partitioning):根据指定的键值将数据分区,例如根据订单ID进行分区。

三、MySQL表分区键选择选择适合的分区键是保证分区效果的关键。

合理的分区键应具备以下特点:1. 唯一性:分区键的值应具备唯一性,避免数据分布不均衡。

2. 常用性:分区键应是常用的查询条件,以提高查询性能。

3. 离散性:分区键的值应具备离散性,避免数据倾斜。

四、MySQL表分区管理MySQL表分区的管理包括创建分区表、添加分区、删除分区、合并分区、重建分区索引等操作。

1. 创建分区表:通过在CREATE TABLE语句中使用PARTITION BY 子句指定分区方法和分区键来创建分区表。

2. 添加分区:通过ALTER TABLE语句中的ADD PARTITION子句来添加新的分区。

3. 删除分区:通过ALTER TABLE语句中的DROP PARTITION子句来删除指定的分区。

4. 合并分区:通过ALTER TABLE语句中的COALESCE PARTITION 子句来合并相邻的分区。

5. 重建分区索引:通过ALTER TABLE语句中的REBUILD PARTITION子句来重建指定分区的索引。

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

hash分区: 基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要 插入到表中的这些行的列值进行计算。这个函数可以包含mysql 中有效的、 产生非负整数值的任何表达式。 hash分区主要用来确保数据在预先确定数目的分区中平均分布。在 range和list分区中,必须明确指定一个给定的列值或列值集合应该保存在 哪个分区中;而在hash分区中,mysql 自动完成这些工作,我们所要做的 只是基于将要被哈希的列值指定一个列值或表达式,以及指定被分区的表将 要被分割成的分区数量。
mysql还支持线性哈希功能,它与常规哈希的区别在于,线性哈希功能使用的一个线 性的2的幂(powers-of-two)运算法则,而常规哈希使用的是求哈希函数值的模数。线 性哈希分区和常规哈希分区在语法上的唯一区别在于,在“partition by”子句中添加 “linear”关键字,如下面所示: 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 linear hash(year(hired)) partitions 4;
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(year(hired)) partitions 4;
假设一个表达式expr, 当使用线性哈希功能时,记录将要保存到的分区 是num 个分区中的分区N,其中N是根据下面的算法得到: 1. 找到下一个大于num.的、2的幂,我们把这个值称为V ,它可以通过下 面的公式得到: 2. V = POWER(2, CEILING(LOG(2, num))) 3. 设置 N = F (column_list) & (V - 1). 4. 当 N >= num: 设置 V = CEIL(V / 2) 设置 N = N & (V - 1)
columns 分区: columns分区是range分区或list分区的一种变体,支持非整形字段作为 分区的键,也可以用多个字段组合起来作为分区的键。 columns分区可允许使用的分区键类型有: 1. 所有的整形:tinyint, smallint, mediumint, int , bigint (和range分 区和list分区相同) 不包括decimal和float这种数字类型的。 2. date 和 datetime 3. 字符型:chra, varchar, binary, varbinary 不包括text和blob型
MySQL表分区
MySQL表分区 houdelei@
一、什么是表分区 二、为什么要对表进行分区 三、分区的类型 四、分区的管理 五、表分区的局限性
表分区通俗来讲就是允许把一个数据表根据一定的规则,跨文件系统划 分成多个可以设置为任意大小的部分。 MySQL从5.1起开始支持表分区,安装了5.1的MySQL默认是开启表分 区支持的。 可以通过: show variables like ‘%partition%’; 来查看你的MySQL是否支持分区。
4. 涉及到例如sum() 和 count()这样聚合函数的查询,可以很容易地进行并 行处理。这种查询的一个简单例子如 “select salesperson_id, count(orders) as order_total from sales group by salesperson_id;”。 通过“并行”, 这意味着该查询可以在每个分区上同时进行,最终结果只 需通过总计所有分区得到的结果。 * 5. 通过跨多个磁盘来分散数据查询,来获得更大的查询吞吐量。
要使用hash分区来分割一个表,要在create table 语句上添加一个 “partition by hash (expr)”子句,其中“expr”是一个返回一个整数的 表达式。它可以仅仅是字段类型为mysql 整型的一列的名字。此外,需要 在后面再添加一个“partitions num”子句,其中num 是一个非负的整数, 它表示表将要被分割成分区的数量。 如果没有包括一个PARTITIONS子句,那么分区的数量将默认为1。 如果在关键字“PARTITIONS”后面没有加上分区的数量,将会出现语 法错误。
子分区:
对于已经通过RANGE或LIST分区了的表可以再进行子分区。子分区既可以使用 HASH希分区,也可以使用KEY分区。这也被称为复合分区(composite partitioning)。 例如: create table ts (id int, purchased date) partition by range(YEAR(purchased)) subpartition by hash(TO_DAYS(purchased)) subpartition 2 ( partition p0 values less than (1990), partition p1 values less than (2000), partition p2 values less than MAXVALUE );
第二条记录将要保存到的分区序号计算如下: V=8 N = YEAR('1998-10-19') & (8-1) = 1998 & 7 =6 (6 >= 4 为真(TRUE): 还需要附加的步骤) N = 6 & (CEILING(8 / 2) – 1) =6&3 =2 (2 >= 4 为假(FALSE): 记录将被保存到#2分区中)
key 分区: 按照key进行分区类似于按照hash分区,除了hash分区使用的用户定义的表 达式,而key分区的哈希函数是由mysql 服务器提供。 create table tk ( col1 int not null, col2 char(5), col3 date ) partition by linear key (col1) partition test2 ( a int, b int, c char(3), d int ) partition by range columns(a,d,c) ( partition p0 values less than (5,10,'ggg'), partition p1 values less than (10,20,'mmm'), partition p2 values less than (15,30,'sss'), partition p3 values less than (MAXVALUE,MAXVALUE,MAXVALUE) );
分区的类型: 1. RANGE分区 2. LIST分区 3. COLUMNS分区 4. HASH分区 5. KEY分区
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 not null, store_id int not null ) partition by range (store_id) ( partition p0 values less than (6), partition p1 values less than (11), partition p2 values less than (16), partition p3 values less than maxvalue );
例如,假设表t1,使用线性哈希分区且有4个分区,是通过下面的语句创建 的: create table t1 ( col1 int not null, col2 char (5), col3 date ) partition by linear key(col1) partitions 4;
现在假设要插入两行记录到表t1中,其中一条记录col3列值为'200304-14',另一条记录col3列值为'1998-10-19'。 第一条记录将要保存到的分区确定如下: V = POWER(2, CEILING(LOG(2,5))) = 8 N = YEAR('2003-04-14') & (8 - 1) = 2003 & 7 =3 (3 >= 4 为假(FALSE): 记录将被保存到#3号分区中)
list columns分区: set names utf8; create table customers ( name varchar(25), city varchar(15) ) partition by list columns(city) ( partition p0 values in('Beijing', 'Shanghai', 'Tianjin'), partition p1 values in('Guanzhou', 'Shenzhen', 'Xiamen') );
相关文档
最新文档