与mysql相比,分区要方便得多。您可以将分区添加到现有的mysql表中,或者将分区扩展到现有的分区表中。下面这篇文章主要介绍mysql分区的相关信息,有需要的朋友可以参考一下。
:
目录
1.Mysql分区类型2,范围分区2,Hash分区3,Key分区4,附列表分区:查询分区,各区表数据量汇总。
一、Mysql分区类型
1.范围分区:根据属于给定连续区间的列值,将多行分配给分区。
2.哈希分区:根据用户定义的表达式的返回值选择的分区,它使用这些行的列值插入到表中进行计算。这个函数可以包含任何在MySQL中有效的表达式,并产生一个非负整数值。
3.KEY partition:类似于通过hash进行分区,只是KEY partition只支持计算一列或多列,MySQL server提供了自己的HASH函数。一列或多列必须包含整数值。
4.复合分区:基于范围/列表类型的分区表,对每个分区再次进行分区。子分区可以是散列/键和其他类型。
二、RANGE分区
缺点:1。分区只能通过整形类型主键来完成。
2.分区数据不均匀。
1.创建分区
如果“product _ partiton _ range”存在,则删除表;
创建表“产品分区范围”(
` id ' int(11)NOT NULL AUTO _ INCREMENT,
` product name ' varchar(255)字符集utf8mb 4 COLLATE utf8mb 4 _ general _ ci NOT NULL,
` product id ' int(11)不为空,
使用BTREE的主键(` Id `)
)ENGINE=InnoDB AUTO _ INCREMENT=1 CHARACTER SET=utf8mb 4
按范围分区(Id)分区3(
分区part0值小于(1000),
分区part1值小于(2000),
分区part2值小于max value);
2.批量添加数据。
DROP PROCEDURE IF EXISTS PROC _ USER _ INSERT;
分隔符$$
-创建存储过程。
创建过程PROC_USER_INSERT(
在START_NUM INT中
在最大整数中
)
开始
声明TEMP _ NUM INT DEFAULT 0;
SET TEMP _ NUM=START _ NUM
而临时数量=最大数量
插入到product _ partition _ range(product name,ProductId)值('小禾苗',TEMP _ NUM);
SET TEMP _ NUM=TEMP _ NUM 1;
结束WHILE
END $ $
分隔符;
-调用存储过程
调用PROC_USER_INSERT(1,5000);
3.通过EXPLAIN PARTITIONS命令,发现SQL优化器只需要搜索对应的分区,而不是所有的分区。
4.如果sql语句有问题,那么所有区域都将被占用。这可能很危险。因此,在对表进行分区之后,select语句必须使用分区键。
5.检查当前表的分区。
挑选
partition_name部分,
分区_表达式表达式,
分区描述描述,
表格_行
FROM information _ schema . partitions其中
表_模式=模式()
并且table _ name=' product _ partition _ range ';
二、Hash分区
优点:分区数据比较平均。
缺陷:HASH分区只能对数值型字段进行分区,不能对字符型字段进行分区。如果需要对字段值进行分区,它们必须包含在主键字段中。
1.创建分区
如果存在“product _ partiton _ hash ”,则删除表;
创建表“产品分区散列”(
` id ' int(11)NOT NULL AUTO _ INCREMENT,
` product name ' varchar(255)字符集utf8mb 4 COLLATE utf8mb 4 _ general _ ci NOT NULL,
` product id ' int(11)不为空,
使用BTREE的主键(` Id `)
)ENGINE=InnoDB AUTO _ INCREMENT=1 CHARACTER SET=utf8mb 4
通过散列(Id)分区进行分区3;
三、Key分区
优点:除了文本和blob字段,其他类型的字段都可以分区。
缺陷:分区不支持文本、blob(二进制)类型字段。
1.创建分区
如果存在“product _ partiton _ key ”,则删除表;
创建表“产品分区密钥”(
` id ' int(11)NOT NULL AUTO _ INCREMENT,
` product name ' varchar(255)字符集utf8mb 4 COLLATE utf8mb 4 _ general _ ci NOT NULL,
` product id ' int(11)不为空,
主键(` Id ',` ProductName '),
索引` ProductId_index`(`ProductId `)
)ENGINE=InnoDB AUTO _ INCREMENT=1 CHARACTER SET=utf8mb 4
按键分区(ProductName)分区3;
四、List分区
优点:支持枚举类型的字段进行分区,比如商品状态,商品类型
1、创建分区
如果存在"产品分区列表",则删除表;
创建表"产品分区列表"(
` id ' int(11)NOT NULL AUTO _ INCREMENT,
“产品名称”varchar(255)字符集utf8mb 4 COLLATE utf8mb 4 _ general _ ci NOT NULL,
“产品id”int(11)不为空,
“产品状态”int(11)不为空,
主键(‘Id’,‘产品状态’),
索引` ProductId_index` (`ProductId `)
)ENGINE=InnoDB AUTO _ INCREMENT=1 CHARACTER SET=utf8mb 4
按列表分区(产品状态)(
在(0,1)中划分p0蛋白值,
在(2,3,4)中划分第一亲代值
);
2、插入数据
插入到产品分区列表(产品名称,产品Id,产品状态)值(‘小禾苗’,1,0);
插入到产品分区列表(产品名称,产品Id,产品状态)值(‘小禾苗’,1,1);
插入到产品分区列表(产品名称,产品Id,产品状态)值(‘小禾苗’,1,2);
插入到产品分区列表(产品名称,产品Id,产品状态)值(‘小禾苗’,1,3);
插入到产品分区列表(产品名称,产品Id,产品状态)值(‘小禾苗’,1,4);
3、查看当前表的分区情况
附:查询分区,各区表数据量
挑选分区名称,表行
来自信息模式.划分
其中TABLE _ NAME='表
总结
1、分区字段必须是主键
2、分区字段,必须以分区字段进行查询,否则分区失效
友情链接
https://www.jb51.net/article/244256.htm
https://www.jb51.net/article/244313.htm
https://www.jb51.net/article/244318.htm
到此这篇关于关系型数据库创建分区的文章就介绍到这了,更多相关关系型数据库创建分区内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。