MySQL使用了教程的分区表(删除分区表)的方法。
1,可以将一些分类数据放在一个分区中,这样可以减少服务器检查数据的数量,从而加快查询速度。
2,易于维护,通过删除分区删除旧数据。
3,分区数据可以分布到不同的物理位置,并且可以分布和有效地使用多个硬盘驱动器。
MySQL可以建立四个分区类型:
范围分区:基于属于给定连续区间的列值,将多个行分配给分区。
列表分区:类似于范围分区,不同之处在于列表分区是基于与离散值集中的值匹配的列值来选择的。
散列分区:基于用户定义表达式的返回值来选择分区,表达式计算将插入表中的行的列值。这个函数可以包含任何在MySQL中有效的表达式,并生成非负整数值。
键分区:类似于哈希分区,不同的是键分区只支持一列或多列,而MySQL服务器提供它自己的散列函数。必须有一列或多列包含整数值。
最常用的是范围分区和列表分区。
范围分区
这是做生意的一笔买卖。
销售表有三个日期/商品/销售字段。
2010年1月1日至2010年9月31日的试验数据
一个月的分区
初始分区定义
首先,您需要查看当前数据库是否支持分区。
复制代码代码如下所示:
显示诸如%分区%之类的变量;
------------------- ------- + + +
| variable_name |价值|
------------------- ------- + + +
| have_partitioning |是|
------------------- ------- + + +
1行集(0.03秒)
创建一个分区表,以年和月的方式进行分区。
复制代码代码如下所示:
MySQL >创建表sale_data(
日期时间不空> sale_date,
sale_item,varchar(2)不为空,
sale_money小数(10,2)不为空
- >)
通过范围->分区(年(sale_date)(sale_date)(* 100 +月)
p201001值小于->分配比(201002),
p201002值小于->分配比(201003),
p201003值小于->分配比(201004),
p201004值小于->分配比(201005),
p201005值小于->分配比(201006),
p201006值小于->分配比(201007),
p201007值小于->分配比(201008),
p201008值小于->分配比(201009),
p201009值小于->分配比(201010),
pcatchall值小于最大->分区
>;
查询OK,0行受影响(0.20秒)
新的分区
复制代码代码如下所示:
MySQL >修改表sale_data
添加分区(分区p201010值小于(201011));
查询OK,0行受影响(0.36秒)
记录:0个重复:0个警告:0
删除一个分区
复制代码代码如下所示:
当一个分区被删除时,分区中的所有数据同时被删除。
MySQL >修改表sale_data删除分区p201010;
查询OK,0行受影响(0.22秒)
记录:0个重复:0个警告:0
合并分区
下面的SQL,p201001 - p201009并入3分区p2010q1 - p2010q3
复制代码代码如下所示:
MySQL >修改表sale_data
分区p201001 ->重组,p201002,p201003,
p201004 p201005,p201006,
p201008,p201009成-> p201007。
(->
p2010q1值小于->分配比(201004),
p2010q2值小于->分配比(201007),
p2010q3值小于->分配比(201010)
>;
查询OK,0行受影响(1.14秒)
记录:0个重复:0个警告:0
划分分区
在下面的SQL,p2010q1分区分为两个分区s2009和S2010
复制代码代码如下所示:
MySQL >修改表sale_data重组划分为(p2010q1
s2009值小于->分配比(201001),
S2010值小于->分配比(201004)
>;
查询OK,0行受影响(0.36秒)
记录:0个重复:0个警告:0
使用来自不同物理位置的数据源进行分区的示例。
复制代码代码如下所示:
创建表TS(ID int,购买日期)
InnoDB引擎=
按范围划分(年份(购买))
子分区哈希(ID)
(
分区P0值小于(1990)
(
s0 / /子和小分区在一个大的分区
数据目录=/ usr / / / data0'data本地MySQL源
索引目录=/ usr / / / index0本地MySQL的 / /索引数据源
子分区S1
数据目录=/ usr / / /本地MySQL数据
索引目录=/ usr / / /本地MySQL 1
),
分区P1值小于(最大值)
(
子分区S2
数据目录=/ usr / / /本地MySQL数据
索引目录=/ usr / / /本地MySQL 1,
子分区S3
数据目录=/ usr / / /本地MySQL数据
索引目录=/ usr / / /指数比本地MySQL的
)
);
分区索引的局限性:
1,所有分区都使用相同的引擎。
2,分区表的每一个索引都必须包含一个由分区函数引用的列。
3,MySQL可以避免查询所有的分区,但仍然锁定所有的分区。
4,分区函数可以使用的函数和表达式是有限的,例如,函数的上面有4个函数。
5,分区不支持外键。
6、不能将负载索引放入缓存中
7,分区并不总是提高性能,需要进行性能评估。
例如,你可以使用分区的解释是否查询语句使用分区来过滤数据。
复制代码代码如下所示:
MySQL >解释分区选择*从fenqubiao哪天< '2011-09-12;
+ -- + + + + ------------- ----------- --------------- ------ + + + + --------------- ------ --------- ------ ------ ------------- + + +
我select_type表| | | |分区类型possible_keys关键| | | | key_len参考行额外的| | | |
+ -- + + + + ------------- ----------- --------------- ------ + + + + --------------- ------ --------- ------ ------ ------------- + + +
| 1 |简单| | fenqubiao p_2010,p_2011所有零| | | | |零2使用在| | |
+ -- + + + + ------------- ----------- --------------- ------ + + + + --------------- ------ --------- ------ ------ ------------- + + +
1行集(0秒)