数码资讯
MySQL分区技术的详细介绍
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
首先,概述
当MySQL记录总数超过100万时,性能会有大幅度下降吗答案是肯定的,但性能下降的比率是不同的。这取决于很多因素,如系统架构、应用程序、>索引、服务器硬件等等。当有网友问我这个问题时,我最常用的答案是分区表很容易,但是应用程序,甚至结构更改,都不会被忽略,包括将来的可伸缩性。
过去,有一种解决方案是使用合并。
这是一种非常方便的烹饪方式,它的架构和程序基本上没有变化,但它的缺点是显而易见的:
1。只能用一个MyISAM表具有相同的结构
2。不能享受MyISAM的所有功能,如无法在合并式执行全文搜索
三.它需要使用更多的文件描述符。
4。读索引慢些
此时,MySQL 5.1中新的分区(分区)功能的优点是显而易见的。
1。与单个磁盘或文件系统分区相比,可以存储更多的数据。
2。很容易删除未使用的或过时的数据。
三.可以极大地优化某些查询。
4。当涉及到聚合函数(如)和()时,可以并行执行。
5.io吞吐量更大
分区允许您设置任意大小的规则,并且在一个文件系统中分配单个表的多个部分,实际上,表的不同部分作为不同的表存储在不同的位置。
应注意的事项:
1。当进行分区时,要么没有定义主键,要么将分区字段添加到主键中。
2,分区字段不能为空,或者如何确定分区范围,所以尽量不要NULL。
二、分区类型
1.range分区:基于列值属于一个给定的连续区间,多行分配给分区。
2.list分区:类似范围分区,不同的是,列表分区是基于列的值,在一组离散的值的值匹配选择。
2.hash分区:基于用户定义的表达式的返回值来选择分区,表达计算的那些行将插入到表中的列值。这个函数可以包含包含非负整数的值,MySQL是任何有效的表达式。
3.key分区:类似于哈希分区,不同的是,关键的分区只支持一列或多列,与MySQL服务器提供自己的哈希函数必须有一个列或多列包含整数值>。
显示变量命令可用于确定MySQL是否支持分区,例如:
复制代码代码如下所示:
显示诸如%分区%之类的变量;
----------------------- ------- + + +
| variable_name |价值|
----------------------- ------- + + +
| have_partition_engine |是|
----------------------- ------- + + +
1行集(0秒)
复制代码代码如下所示:
显示诸如%分区%之类的变量;
----------------------- ------- + + +
| variable_name |价值|
----------------------- ------- + + +
| have_partition_engine |是|
----------------------- ------- + + +
1行集(0秒)
1、范围划分
复制代码代码如下所示:
创建表t_range(
id int(11),
货币int(11)无符号不空,
日期日期
按范围划分(年份(日期))
分区p2007值小于(2008),
分区2008的值小于(2009),
分区p2009值小于(2010)
分区的P2010值小于最大
);
2.list分区
复制代码代码如下所示:
创建表t_list(
int(11),
B int(11)
(按列表划分)(b)
分区P0值(第3),
分区P1值(2,4,6,8,0)
);
InnoDB和MyISAM引擎,当一个句子插入多条记录,如果该值未插入时,InnoDB将回滚。在MyISAM可以向表中插入数据。InnoDB和MyISAM引擎,当一个句子插入多条记录,如果该值未插入时,InnoDB将回滚。在MyISAM可以向表中插入数据。
3.hash分区
哈希分区的目的是将数据均匀地分配到预定义的分区中,以确保每个分区的数据大致相同。
复制代码代码如下所示:
创建表t_hash(
int(11),
B型
按散列划分(年份(b))
分区4;
散列的分区函数页需要返回一个整数值。分区子句中的值是非负整数,分区子句的默认值是分区数为1。
4.key分区
关键的分区和散列分区是相似的,不同的哈希分区是一个用户定义的功能分区,分区功能键使用NDB簇划分提供了MySQL数据库,使用MD5哈希函数为MySQL使用其他存储引擎的内部功能分区,基于密码的功能(这些相同的算法)。
复制代码代码如下所示:
创建表t_key(
int(11),
B型)
按键分区(b)
分区4;
5、列分区
在上面的四个分区中,范围、列表、散列和键,分区条件必须是塑料的,如果不是塑料,则需要按函数转换成塑料。
mysql 5.5开始支撑柱的分区,这可以看作是范围和列表分区的演变,和列分区可以划分直接与非塑性数据,列分区支持下列数据类型:
所有的塑料,如int SmallInt tinyint bigint.float和小数不支持。
日期类型,如日期和时间,不支持其他数据类型。
字符串类型,如CHAR、varchar,二进制,和varbinary。BLOB和文本类型不支持。
可以用多列对列进行分区。
新的分区
复制代码代码如下所示:
MySQL >修改表sale_data
ADD PARTITION (PARTITION p201010 VALUES, LESS THAN (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
当MySQL记录总数超过100万时,性能会有大幅度下降吗答案是肯定的,但性能下降的比率是不同的。这取决于很多因素,如系统架构、应用程序、>索引、服务器硬件等等。当有网友问我这个问题时,我最常用的答案是分区表很容易,但是应用程序,甚至结构更改,都不会被忽略,包括将来的可伸缩性。
过去,有一种解决方案是使用合并。
这是一种非常方便的烹饪方式,它的架构和程序基本上没有变化,但它的缺点是显而易见的:
1。只能用一个MyISAM表具有相同的结构
2。不能享受MyISAM的所有功能,如无法在合并式执行全文搜索
三.它需要使用更多的文件描述符。
4。读索引慢些
此时,MySQL 5.1中新的分区(分区)功能的优点是显而易见的。
1。与单个磁盘或文件系统分区相比,可以存储更多的数据。
2。很容易删除未使用的或过时的数据。
三.可以极大地优化某些查询。
4。当涉及到聚合函数(如)和()时,可以并行执行。
5.io吞吐量更大
分区允许您设置任意大小的规则,并且在一个文件系统中分配单个表的多个部分,实际上,表的不同部分作为不同的表存储在不同的位置。
应注意的事项:
1。当进行分区时,要么没有定义主键,要么将分区字段添加到主键中。
2,分区字段不能为空,或者如何确定分区范围,所以尽量不要NULL。
二、分区类型
1.range分区:基于列值属于一个给定的连续区间,多行分配给分区。
2.list分区:类似范围分区,不同的是,列表分区是基于列的值,在一组离散的值的值匹配选择。
2.hash分区:基于用户定义的表达式的返回值来选择分区,表达计算的那些行将插入到表中的列值。这个函数可以包含包含非负整数的值,MySQL是任何有效的表达式。
3.key分区:类似于哈希分区,不同的是,关键的分区只支持一列或多列,与MySQL服务器提供自己的哈希函数必须有一个列或多列包含整数值>。
显示变量命令可用于确定MySQL是否支持分区,例如:
复制代码代码如下所示:
显示诸如%分区%之类的变量;
----------------------- ------- + + +
| variable_name |价值|
----------------------- ------- + + +
| have_partition_engine |是|
----------------------- ------- + + +
1行集(0秒)
复制代码代码如下所示:
显示诸如%分区%之类的变量;
----------------------- ------- + + +
| variable_name |价值|
----------------------- ------- + + +
| have_partition_engine |是|
----------------------- ------- + + +
1行集(0秒)
1、范围划分
复制代码代码如下所示:
创建表t_range(
id int(11),
货币int(11)无符号不空,
日期日期
按范围划分(年份(日期))
分区p2007值小于(2008),
分区2008的值小于(2009),
分区p2009值小于(2010)
分区的P2010值小于最大
);
2.list分区
复制代码代码如下所示:
创建表t_list(
int(11),
B int(11)
(按列表划分)(b)
分区P0值(第3),
分区P1值(2,4,6,8,0)
);
InnoDB和MyISAM引擎,当一个句子插入多条记录,如果该值未插入时,InnoDB将回滚。在MyISAM可以向表中插入数据。InnoDB和MyISAM引擎,当一个句子插入多条记录,如果该值未插入时,InnoDB将回滚。在MyISAM可以向表中插入数据。
3.hash分区
哈希分区的目的是将数据均匀地分配到预定义的分区中,以确保每个分区的数据大致相同。
复制代码代码如下所示:
创建表t_hash(
int(11),
B型
按散列划分(年份(b))
分区4;
散列的分区函数页需要返回一个整数值。分区子句中的值是非负整数,分区子句的默认值是分区数为1。
4.key分区
关键的分区和散列分区是相似的,不同的哈希分区是一个用户定义的功能分区,分区功能键使用NDB簇划分提供了MySQL数据库,使用MD5哈希函数为MySQL使用其他存储引擎的内部功能分区,基于密码的功能(这些相同的算法)。
复制代码代码如下所示:
创建表t_key(
int(11),
B型)
按键分区(b)
分区4;
5、列分区
在上面的四个分区中,范围、列表、散列和键,分区条件必须是塑料的,如果不是塑料,则需要按函数转换成塑料。
mysql 5.5开始支撑柱的分区,这可以看作是范围和列表分区的演变,和列分区可以划分直接与非塑性数据,列分区支持下列数据类型:
所有的塑料,如int SmallInt tinyint bigint.float和小数不支持。
日期类型,如日期和时间,不支持其他数据类型。
字符串类型,如CHAR、varchar,二进制,和varbinary。BLOB和文本类型不支持。
可以用多列对列进行分区。
新的分区
复制代码代码如下所示:
MySQL >修改表sale_data
ADD PARTITION (PARTITION p201010 VALUES, LESS THAN (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
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。