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之表分区----按⽇期分区于 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中的数据分页与分块处理技巧在Web开发中,我们经常需要处理大量的数据并进行展示。
而对于大数据集来说,如果一次性加载全部数据,会导致页面加载速度变慢,用户体验不佳。
为了解决这个问题,常用的方法是将数据进行分页展示或者分块处理。
这篇文章将介绍在MySQL中实现数据分页与分块处理的技巧。
一、数据分页的基本原理数据分页是将大量的数据按照一定的数量进行分割,每次只加载一页的数据展示给用户。
以一个订单表为例,假设有10000个订单数据,需要分页展示,每页显示10条数据。
那么,首先需要确定页数,即总订单数/每页数量。
然后,根据当前页码来确定需要查询的数据的起始位置。
最后,使用LIMIT关键字来限制查询结果的数量。
二、MySQL中的分页查询在MySQL中实现数据分页可以使用LIMIT关键字来进行分页查询。
LIMIT关键字的功能是:通过指定偏移量和需要加载的行数来限制查询结果。
例如,查询订单表中从第11行开始的10条数据,可以使用以下SQL语句:```SELECT * FROM order_tableLIMIT 10 OFFSET 10;```其中,LIMIT 10表示需要加载的行数,OFFSET 10表示偏移量,即起始位置为第11行。
对于分页查询来说,还需要处理边界情况,如当页码小于1时,将其设置为1;当页码大于总页数时,将其设置为总页数。
三、MySQL中的数据分块处理除了数据分页,有时候我们需要对大数据集进行分块处理。
分块处理是将大数据集按照一定的大小进行分割,每次处理一块数据,以提高效率。
在MySQL中,分块处理可以通过设置循环进行数据处理和控制处理的块大小来实现。
以下是一个示例代码:```SET @block_size = 1000;SET @total_rows = (SELECT COUNT(*) FROM big_table);SET @total_blocks = CEIL(@total_rows/@block_size);SET @current_block = 0;WHILE @current_block < @total_blocks DOSET @offset = @current_block * @block_size;SET @current_block = @current_block + 1;-- 在这里进行数据处理和操作SELECT * FROM big_tableLIMIT @block_size OFFSET @offset;END WHILE;```在上述代码中,我们通过设置变量来分别记录块的大小、总行数、总块数和当前块的位置。
如何使用MySQL进行大数据量的数据存储

如何使用MySQL进行大数据量的数据存储随着数据量的不断增长,很多企业和组织都面临着如何高效地存储和管理大量数据的挑战。
MySQL作为一种开源的关系型数据库管理系统,被广泛应用于大数据存储领域。
本文将介绍如何使用MySQL进行大数据量的数据存储,以及一些优化策略和技巧。
一、MySQL的大数据存储能力MySQL作为一种关系型数据库管理系统,拥有良好的大数据存储能力。
以下是MySQL承载大数据量的几个关键因素:1. 分区表设计:使用分区表可以将数据分散存储在多个物理分区中,从而提高查询效率。
对于大数据量的表,可以根据业务需求进行逻辑分区,例如按日期、地理位置等进行分区。
2. 垂直切分和水平切分:当数据量较大时,可以采用垂直切分和水平切分的方式将数据分散存储在多个表或数据库中。
垂直切分指按照字段进行切分,将不同的字段放在不同的表中;水平切分指按照数据行进行切分,将不同的数据行放在不同的表或数据库中。
3. 索引优化:合理的索引设计可以大大提高查询效率。
在大数据存储中,应根据查询需求设计适当的索引,并定期优化和维护索引。
4. 分布式数据库:MySQL可以通过主从复制、多主复制等方式实现分布式数据库的部署,进一步提高数据存储和查询的性能。
分布式数据库可以将数据分布在多个节点上,利用集群的计算和存储资源更好地处理大数据量。
二、MySQL大数据存储优化策略除了MySQL的基本能力外,还可以采用一些存储优化策略来提高数据存储效率。
以下是一些常用的优化策略:1. 数据冗余与压缩:对于大数据量的存储,可以考虑使用数据冗余和压缩技术。
数据冗余是指在存储数据时,将相同的数据复制到多个位置;数据压缩是指将数据压缩为更小的存储空间。
这些技术可以减少存储空间的占用,并提高数据读写的效率。
2. 使用存储引擎:MySQL支持多种存储引擎,例如InnoDB、MyISAM等。
不同的存储引擎对于大数据量存储的性能和特性有所不同。
根据实际需求选择合适的存储引擎可以提高数据存储效率。
深入解析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 的开发者和其他的⼈,会在上⾯发表和更新有关的材料。
它由分区开发和⽂献团队的成员负责监控。
MySQL中的数据分隔和分批处理方法

MySQL中的数据分隔和分批处理方法引言:MySQL是一个流行的关系型数据库管理系统,被广泛用于各种应用程序中。
在处理大量数据时,对数据的分隔和分批处理成为提高性能和效率的关键。
本文将讨论MySQL中的数据分隔和分批处理方法,以帮助开发人员更好地管理和优化数据库操作。
1. 数据分隔的意义和方法数据分隔是将大数据集分割成较小的部分,以便更好地管理和处理。
它的主要目的是减少查询时间和优化性能。
以下是一些常用的数据分隔方法:1.1 基于范围的分区:基于范围的分区将数据按照某个指定的范围进行分区。
例如,将订单表按照日期范围进行分区,可以将每个月的订单分别存储在不同的分区中。
这样可以快速地查询某个特定日期范围内的订单数据,而无需扫描整个表。
1.2 基于列表的分区:基于列表的分区将数据按照指定的列表进行分区。
例如,根据地区将销售表分区为“东部”、“西部”和“中部”。
这样可以更好地组织数据,并在执行特定查询时提高性能。
1.3 基于哈希的分区:基于哈希的分区将数据根据哈希函数的结果进行分区。
这种方法可以将数据均匀地分布到不同的分区中,以实现负载均衡和查询的优化。
2. 数据分隔的实践与注意事项在对数据进行分隔时,还需要考虑以下几点:2.1 数据量和查询模式:支持分隔的主要原因是减小数据集的大小,提高查询性能。
因此,在进行数据分隔之前,需要评估数据量和查询模式,确定是否能够获得显著的性能提升。
2.2 分区键的选择:分区键是用于将数据进行分隔的列。
选择合适的分区键非常重要,它直接影响了查询的性能。
一般而言,分区键应选择常用于查询条件的列,以减少扫描的数据量。
2.3 分区数量与大小:分隔的数量和大小直接关系到查询的性能。
分区数量过多可能会增加查询的开销,而分区过大可能会导致不均衡的负载和查询性能下降。
这一点需要根据具体应用场景进行调整和优化。
3. 数据分隔的优势和劣势数据分隔在一定程度上提高了数据库的性能和效率,但也存在一些限制和劣势。
如何使用MySQL进行大数据量处理和分析
如何使用MySQL进行大数据量处理和分析在当今信息时代,我们生活在一个数据爆炸的时代。
随着科技的不断发展,数据量也不断增长,尤其是对于一些大型企业和互联网公司来说,他们经常需要处理和分析大数据量。
MySQL作为一个开源关系型数据库管理系统,具备了处理大数据量的能力,并且被使用于许多大型项目中。
本文将探讨如何使用MySQL进行大数据量的处理和分析,以及相关的技术和策略。
一、选择合适的MySQL版本和配置在处理大数据量之前,我们需要选择一个适用于大数据处理的MySQL版本,并进行相应的配置。
MySQL提供了多个版本,例如MySQL Community Edition、MySQL Cluster、MySQL Enterprise等。
针对大数据场景,我们可以选择MySQL Cluster,它具备了横向扩展和高可用性的特点。
此外,我们还需要根据实际需求对MySQL进行适当的配置,包括调整缓存大小、并发连接数、索引等参数,以提高MySQL的性能和稳定性。
二、数据分区和分表技术一般来说,大数据量的处理和分析涉及到的数据通常都是分布在多个表中的。
在MySQL中,我们可以使用数据分区和分表技术来提高查询速度和降低负载。
数据分区是将一个表按照某个规则划分为多个分区,分别存储在不同的文件中,以提高查询效率。
而分表是将一个表按照某个规则划分为多个子表,可以根据查询的条件选择相应的子表进行查询。
通过合理的数据分区和分表策略,我们可以充分利用MySQL的横向扩展能力,提高处理和分析大数据量的效率。
三、合理设计数据库结构和索引在处理和分析大数据量时,数据库的结构设计至关重要。
合理的数据库结构可以提高查询效率,并减少数据库的冗余和复杂度。
首先,我们需要根据业务需求和数据特点设计合适的数据表和字段。
其次,我们需要根据查询的频率和方式来设计相应的索引。
索引可以加快数据库查询的速度,但也会增加数据库的存储和维护成本。
因此,我们需要根据实际情况权衡利弊,并选择合适的索引类型和数量。
mysql分区语句
mysql分区语句MySQL分区是一种将单个逻辑表分割成多个物理表的技术,可以提高查询速度、减少硬件开销和数据维护的难度。
在使用分区技术之前,需要先创建一个分区字段,以便将表的数据根据这个字段值分散到不同的物理表中。
下面是关于MySQL分区语句的详细介绍。
MySQL分区语句的基本语法如下:ALTER TABLE table_name PARTITION BY partition_type(partition_field) PARTITIONS partition_num;其中,table_name是需要进行分区的表名,partition_type是分区类型(例如:HASH、KEY、RANGE等),partition_field是用来进行分区的字段名,partition_num是分区的数量。
以下是MySQL分区语句的几种常用分区类型及其用法:1. HASH分区HASH分区是根据一个分区键进行分区的,分区键的值将会被HASH成一个数字,这个数字确定了该行数据所在的分区。
HASH分区可以用于分散随机查询,因为它可以让数据分布在多个分区中,从而减轻单个分区的负担。
例如:ALTER TABLE orders PARTITION BY HASH(order_id) PARTITIONS 4;2. KEY分区KEY分区是根据一个或多个字段来进行分区的,这些字段可以是主键或唯一键等。
如果使用多个字段进行分区,则需要在语句中使用括号将字段名括起来。
例如:ALTER TABLE customers PARTITION BY KEY(id) PARTITIONS 5;ALTER TABLE customers PARTITION BY KEY(id, date) PARTITIONS 5;3. RANGE分区RANGE分区是根据一个分区键的范围值进行分区的,可以根据日期、数字等数据类型进行分区。
分区范围可以使用比较运算符(例如:>, <, =等)或者BETWEEN运算符来指定。
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子句来重建指定分区的索引。
MySQL中的数据分库和分表策略
MySQL中的数据分库和分表策略MySQL是目前使用最广泛的关系型数据库管理系统之一。
在处理大规模数据时,为了提高查询效率和维护性,常常需要进行数据分库和分表。
数据分库和分表是一种将数据分散存储在多个数据库或多个表中的策略,可以有效地提高数据库的性能和可扩展性。
本文将深入探讨MySQL中的数据分库和分表策略。
一、数据分库策略1. 垂直分库垂直分库是指按照数据的业务属性将不同的表分散存储在不同的数据库中。
例如,对于一个电子商务网站,可以将用户相关的表存储在一个数据库中,将订单相关的表存储在另一个数据库中。
这种策略适用于业务模块之间关联性较弱的场景,可以提高查询效率,并且便于维护。
2. 水平分库水平分库是指按照数据的某个维度(如用户ID或时间范围)将数据划分为多个数据库。
例如,对于一个社交网络应用,可以根据用户ID的哈希值或取模运算将用户数据分散存储在多个数据库中。
这种策略可以实现数据的均衡分布,提高查询并行度和扩展性,但同时也增加了数据查询的复杂度和维护成本。
3. 分库规则在进行数据分库时,需要根据业务需求确定分库的规则。
常见的分库规则包括:- 哈希分库:根据数据的哈希值将数据分散存储在不同的数据库中,可以实现数据的均衡分布,但可能导致数据的热点问题。
- 范围分库:根据数据的某个范围(如时间范围、地理位置范围等)将数据划分到不同的数据库中,可以根据业务需求实现更好的查询性能。
- 按业务模块分库:将不同的业务模块分散存储在不同的数据库中,可以提高查询效率和维护性。
二、数据分表策略除了数据分库,数据分表也是提高数据库性能和可扩展性的重要手段。
数据分表是将一个大表分割成多个小表存储数据的策略。
1. 垂直分表垂直分表是指按照数据的列属性将不同的列存储在不同的表中。
例如,对于一个用户表,可以将基本信息(如用户名、密码等)存储在一个表中,将扩展信息(如性别、年龄等)存储在另一个表中。
这种策略可以减小表的宽度,提高查询效率,并且便于维护。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MySQL分区的简单实例,用于解决大数据表的问题MySQL分区的简单实例mysql数据库的分区mysql数据库分区也叫mysql数据库分表,即当一个表中数据库非常大时,查询速度非常慢影响效率,同时也增加了io的压力,这样我们就可以用分表的形式将一个表根据一定的规则将他分成多个表,主要的分表类型有range,list,hash,key等,详细说明可以参考mysql5.1以上版本参考手册mysql分区支持主要在5.1以上版本,如果你的mysql是5.1以上版本,查看是否支持分区的方式是:mysql> show variables like ‗h%‘;+————————-+———————–+| Variable_name | Value |+————————-+———————–+| have_community_features | YES || have_compress | YES || have_crypt | YES || have_csv | YES || have_dynamic_loading | YES || have_geometry | YES || have_innodb | NO || have_ndbcluster | NO || have_openssl | NO || have_partitioning | YES | –>>此项为yes说明支持表分区功能,如果为No则需要重新编译| have_query_cache | YES || have_rtree_keys | YES || have_ssl | NO || have_symlink | YES || hostname | localhost.localdomain |+————————-+———————–+15 rows in set (0.02 sec)如果不支持,则需要下载mysql5.1及以上版本,重新编译安装,这里以mysql-5.1.30.tar.gz来编译安装1.下载mysql-5.1.30.tar.gz源码,2.解压tar xvzf mysql-5.1.30.tar.gzcd mysql-5.1.30./configure –prefix=/usr/local/mysql \–localstatedir=/data \–datadir=/data \–with-plugins=partition //添加分区功能make && make installcd /usr/local/mysql/bin./mysql_install_db./mysqld_safe &3.安装成功,则时mysql支持分区功能4.分区简单实例,以range分区类型为例:create table users00 (uid int unsigned not null auto_increment primary key,name varchar(30) not null default ―‖,email varchar(30) not null default ―‖)partition by range (uid)( partition p0 values less than (10000) data directory = ―/data00/‖ index directory = ―/data00/‖,partition p1 values less than (20000) data directory = ―/data00/‖ index directory = ―/data00/‖,partition p2 values less than (30000) data directory = ―/data00/‖ index directory = ―/data00/‖,partition p3 values less than maxvalue data directory = ―/data00/‖ index directory = ―/data00/‖);该表分区类型为range,分为4个区,uid为0~10000在p0区,10001~20000在p1区…查看users00表所在的数据目录:….-rw-rw—- 1 root root 8620 Nov 22 14:47 users00.frm-rw-rw—- 1 root root 32 Nov 22 14:47 users00.parlrwxrwxrwx 1 root root 24 Nov 22 14:47 users00#P#p0.MYD -> /data00/users00#P#p0.MYDlrwxrwxrwx 1 root root 24 Nov 22 14:47 users00#P#p0.MYI -> /data00/users00#P#p0.MYIlrwxrwxrwx 1 root root 24 Nov 22 14:39 users00#P#p1.MYD -> /data00/users00#P#p1.MYDlrwxrwxrwx 1 root root 24 Nov 22 14:39 users00#P#p1.MYI -> /data00/users00#P#p1.MYIlrwxrwxrwx 1 root root 24 Nov 22 14:39 users00#P#p2.MYD -> /data00/users00#P#p2.MYDlrwxrwxrwx 1 root root 24 Nov 22 14:39 users00#P#p2.MYI -> /data00/users00#P#p2.MYIlrwxrwxrwx 1 root root 24 Nov 22 14:39 users00#P#p3.MYD -> /data00/users00#P#p3.MYDlrwxrwxrwx 1 root root 24 Nov 22 14:39 users00#P#p3.MYI -> /data00/users00#P#p3.MYI….此时表数据已经达到了物理分区,这样可以减少同一目录的IO,同时由单表的3w记录下降到了单表1w的数据量,这样查询起来效率更高5.分区的修改和合并以下是将p0分区再分割成2分区s0,s1的例子:mysql> alter table users00 reorganize partition p0 into( partition s0 values less than (3999) data directory=‘/data00/‘ index directory=‘/data00/‘, partition s1 values less than (10000) data directory=‘/data00/‘ indexdirectory=‘/data00/‘ );Query OK, 0 rows affected (0.03 sec)Records: 0 Duplicates: 0 Warnings: 0mysql>分割成功,查看/data00/数据目录:…..-rw-rw—- 1 root root 8620 Nov 22 15:01 users00.frm-rw-rw—- 1 root root 40 Nov 22 15:01 users00.parlrwxrwxrwx 1 root root 24 Nov 22 14:39 users00#P#p1.MYD -> /data00/users00#P#p1.MYDlrwxrwxrwx 1 root root 24 Nov 22 14:39 users00#P#p1.MYI -> /data00/users00#P#p1.MYIlrwxrwxrwx 1 root root 24 Nov 22 14:39 users00#P#p2.MYD -> /data00/users00#P#p2.MYDlrwxrwxrwx 1 root root 24 Nov 22 14:39 users00#P#p2.MYI -> /data00/users00#P#p2.MYIlrwxrwxrwx 1 root root 24 Nov 22 14:39 users00#P#p3.MYD -> /data00/users00#P#p3.MYDlrwxrwxrwx 1 root root 24 Nov 22 14:39 users00#P#p3.MYI -> /data00/users00#P#p3.MYIlrwxrwxrwx 1 root root 24 Nov 22 15:01 users00#P#s0.MYD -> /data00/users00#P#s0.MYDlrwxrwxrwx 1 root root 24 Nov 22 15:01 users00#P#s0.MYI -> /data00/users00#P#s0.MYIlrwxrwxrwx 1 root root 24 Nov 22 15:01 users00#P#s1.MYD -> /data00/users00#P#s1.MYDlrwxrwxrwx 1 root root 24 Nov 22 15:01 users00#P#s1.MYI -> /data00/users00#P#s1.MYI……以下是合并s0,s1分区为p0分区mysql> alter table users00 reorganize partition s0,s1 into( partition p0 values less than(10000) datadirectory=‖/data00/‖ index directory=‖/data00/‖);Query OK, 0 rows affected (0.03 sec)Records: 0 Duplicates: 0 Warnings: 0此时s0,s1又合并成了p0分区….-rw-rw—- 1 root root 8620 Nov 22 15:04 users00.frm-rw-rw—- 1 root root 32 Nov 22 15:04 users00.parlrwxrwxrwx 1 root root 24 Nov 22 15:04 users00#P#p0.MYD -> /data00/users00#P#p0.MYDlrwxrwxrwx 1 root root 24 Nov 22 15:04 users00#P#p0.MYI -> /data00/users00#P#p0.MYIlrwxrwxrwx 1 root root 24 Nov 22 14:39 users00#P#p1.MYD -> /data00/users00#P#p1.MYDlrwxrwxrwx 1 root root 24 Nov 22 14:39 users00#P#p1.MYI -> /data00/users00#P#p1.MYIlrwxrwxrwx 1 root root 24 Nov 22 14:39 users00#P#p2.MYD -> /data00/users00#P#p2.MYDlrwxrwxrwx 1 root root 24 Nov 22 14:39 users00#P#p2.MYI -> /data00/users00#P#p2.MYIlrwxrwxrwx 1 root root 24 Nov 22 14:39 users00#P#p3.MYD -> /data00/users00#P#p3.MYDlrwxrwxrwx 1 root root 24 Nov 22 14:39 users00#P#p3.MYI -> /data00/users00#P#p3.MYI….详细的分区信息及功能介绍请参考mysql参考手册,里面有非常详细的介绍,我这里只是简单的实现,很多地方都不够详细,只作为数据库分表及数据分离的参考。