分区发展进度

   
 
基于表的分区功效为简化分区表的始建和掩护进程提供了灵活性和越来越好的习性。追溯到逻辑分区表和手动分区表的成效.

mysql数据库是二个常用的关系型数据库

对此数据库中的树形结构数据,如部门表,偶然候,我们供给掌握某部门的兼具下属部分要么某部分的具备上级部门,那时候就须求使用mysql的递归查询

二.为何要开展分区

   为了改正大型表以及具备各个访问格局的表的可伸缩性和可管理性。

   大型表除了大大小小以数百 GB 计算,以至以 TB
总括的指标外,还足以是无力回天依据预期格局运营的数据表,运维开销或尊崇费用高于预订须要。例如爆发质量难题、阻塞难题、备份。

关系型数据库宗旨要素有如何?

1、创建表

DROP TABLE IF EXISTS `t_areainfo`;
CREATE TABLE `t_areainfo` (
 `id` int(11) NOT '0' AUTO_INCREMENT,
 `level` int(11) DEFAULT '0',
 `name` varchar(255) DEFAULT '0',
 `parentId` int(11) DEFAULT '0',
 `status` int(11) DEFAULT '0',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=utf8;

 三. 分区的定义

 主键:特殊字段,用来唯一标记记录的独一性
 字段:数据列
 记录:数据行
 数据表:数据行的联谊
 数据库:数据表的聚众

2、初步数据

INSERT INTO `t_areainfo` VALUES ('1', '0', '中国', '0', '0');
INSERT INTO `t_areainfo` VALUES ('2', '0', '华北区', '1', '0');
INSERT INTO `t_areainfo` VALUES ('3', '0', '华南区', '1', '0');
INSERT INTO `t_areainfo` VALUES ('4', '0', '北京', '2', '0');
INSERT INTO `t_areainfo` VALUES ('5', '0', '海淀区', '4', '0');
INSERT INTO `t_areainfo` VALUES ('6', '0', '丰台区', '4', '0');
INSERT INTO `t_areainfo` VALUES ('7', '0', '朝阳区', '4', '0');
INSERT INTO `t_areainfo` VALUES ('8', '0', '北京XX区1', '4', '0');
INSERT INTO `t_areainfo` VALUES ('9', '0', '北京XX区2', '4', '0');
INSERT INTO `t_areainfo` VALUES ('10', '0', '北京XX区3', '4', '0');
INSERT INTO `t_areainfo` VALUES ('11', '0', '北京XX区4', '4', '0');
INSERT INTO `t_areainfo` VALUES ('12', '0', '北京XX区5', '4', '0');
INSERT INTO `t_areainfo` VALUES ('13', '0', '北京XX区6', '4', '0');
INSERT INTO `t_areainfo` VALUES ('14', '0', '北京XX区7', '4', '0');
INSERT INTO `t_areainfo` VALUES ('15', '0', '北京XX区8', '4', '0');
INSERT INTO `t_areainfo` VALUES ('16', '0', '北京XX区9', '4', '0');
INSERT INTO `t_areainfo` VALUES ('17', '0', '北京XX区10', '4', '0');
INSERT INTO `t_areainfo` VALUES ('18', '0', '北京XX区11', '4', '0');
INSERT INTO `t_areainfo` VALUES ('19', '0', '北京XX区12', '4', '0');
INSERT INTO `t_areainfo` VALUES ('20', '0', '北京XX区13', '4', '0');
INSERT INTO `t_areainfo` VALUES ('21', '0', '北京XX区14', '4', '0');
INSERT INTO `t_areainfo` VALUES ('22', '0', '北京XX区15', '4', '0');
INSERT INTO `t_areainfo` VALUES ('23', '0', '北京XX区16', '4', '0');
INSERT INTO `t_areainfo` VALUES ('24', '0', '北京XX区17', '4', '0');
INSERT INTO `t_areainfo` VALUES ('25', '0', '北京XX区18', '4', '0');
INSERT INTO `t_areainfo` VALUES ('26', '0', '北京XX区19', '4', '0');
INSERT INTO `t_areainfo` VALUES ('27', '0', '北京XX区1', '4', '0');
INSERT INTO `t_areainfo` VALUES ('28', '0', '北京XX区2', '4', '0');
INSERT INTO `t_areainfo` VALUES ('29', '0', '北京XX区3', '4', '0');
INSERT INTO `t_areainfo` VALUES ('30', '0', '北京XX区4', '4', '0');
INSERT INTO `t_areainfo` VALUES ('31', '0', '北京XX区5', '4', '0');
INSERT INTO `t_areainfo` VALUES ('32', '0', '北京XX区6', '4', '0');
INSERT INTO `t_areainfo` VALUES ('33', '0', '北京XX区7', '4', '0');
INSERT INTO `t_areainfo` VALUES ('34', '0', '北京XX区8', '4', '0');
INSERT INTO `t_areainfo` VALUES ('35', '0', '北京XX区9', '4', '0');
INSERT INTO `t_areainfo` VALUES ('36', '0', '北京XX区10', '4', '0');
INSERT INTO `t_areainfo` VALUES ('37', '0', '北京XX区11', '4', '0');
INSERT INTO `t_areainfo` VALUES ('38', '0', '北京XX区12', '4', '0');
INSERT INTO `t_areainfo` VALUES ('39', '0', '北京XX区13', '4', '0');
INSERT INTO `t_areainfo` VALUES ('40', '0', '北京XX区14', '4', '0');
INSERT INTO `t_areainfo` VALUES ('41', '0', '北京XX区15', '4', '0');
INSERT INTO `t_areainfo` VALUES ('42', '0', '北京XX区16', '4', '0');
INSERT INTO `t_areainfo` VALUES ('43', '0', '北京XX区17', '4', '0');
INSERT INTO `t_areainfo` VALUES ('44', '0', '北京XX区18', '4', '0');
INSERT INTO `t_areainfo` VALUES ('45', '0', '北京XX区19', '4', '0');
INSERT INTO `t_areainfo` VALUES ('46', '0', 'xx省1', '1', '0');
INSERT INTO `t_areainfo` VALUES ('47', '0', 'xx省2', '1', '0');
INSERT INTO `t_areainfo` VALUES ('48', '0', 'xx省3', '1', '0');
INSERT INTO `t_areainfo` VALUES ('49', '0', 'xx省4', '1', '0');
INSERT INTO `t_areainfo` VALUES ('50', '0', 'xx省5', '1', '0');
INSERT INTO `t_areainfo` VALUES ('51', '0', 'xx省6', '1', '0');
INSERT INTO `t_areainfo` VALUES ('52', '0', 'xx省7', '1', '0');
INSERT INTO `t_areainfo` VALUES ('53', '0', 'xx省8', '1', '0');
INSERT INTO `t_areainfo` VALUES ('54', '0', 'xx省9', '1', '0');
INSERT INTO `t_areainfo` VALUES ('55', '0', 'xx省10', '1', '0');
INSERT INTO `t_areainfo` VALUES ('56', '0', 'xx省11', '1', '0');
INSERT INTO `t_areainfo` VALUES ('57', '0', 'xx省12', '1', '0');
INSERT INTO `t_areainfo` VALUES ('58', '0', 'xx省13', '1', '0');
INSERT INTO `t_areainfo` VALUES ('59', '0', 'xx省14', '1', '0');
INSERT INTO `t_areainfo` VALUES ('60', '0', 'xx省15', '1', '0');
INSERT INTO `t_areainfo` VALUES ('61', '0', 'xx省16', '1', '0');
INSERT INTO `t_areainfo` VALUES ('62', '0', 'xx省17', '1', '0');
INSERT INTO `t_areainfo` VALUES ('63', '0', 'xx省18', '1', '0');
INSERT INTO `t_areainfo` VALUES ('64', '0', 'xx省19', '1', '0');

    分区范围

         
 分区范围是指在要分区的表中,依据业务选取表中的入眼字段做为分区边界条件, 
         
 分区后,数据所在的具体地方至关心器重要,那样才干在须求时只访谈相应的分区。  
       

           注意分区是指多少的逻辑分离,不是数额在磁盘上的物理地点,
数据的职分由文件组来决定,所以一般建议二个分区对应三个文件组。

设置、运营、为止、重启mysql服务器的下令

3、向下递归

利用find_in_set()函数和group_concat()函数完毕递归查询:

DROP FUNCTION IF EXISTS queryChildrenAreaInfo;
DELIMITER ;;
CREATE FUNCTION queryChildrenAreaInfo(areaId INT)
RETURNS VARCHAR(4000)
BEGIN
DECLARE sTemp VARCHAR(4000);
DECLARE sTempChd VARCHAR(4000);

SET sTemp='$';
SET sTempChd = CAST(areaId AS CHAR);

WHILE sTempChd IS NOT NULL DO
SET sTemp= CONCAT(sTemp,',',sTempChd);
SELECT GROUP_CONCAT(id) INTO sTempChd FROM t_areainfo WHERE FIND_IN_SET(parentId,sTempChd)>0;
END WHILE;
RETURN sTemp;
END
;;
DELIMITER ;

    分区键                 

         
 在作者下边包车型大巴示范中,有贰个仓库储存表,我采纳了UpByMemberID(会员ID) 作为分区键。
对表和目录举办分区的第一步正是定义分区的要紧数据。

 安装:sudo apt-get install mysql-server
 启动:sudo service mysql start
 # 查看进度中是还是不是存在mysql服务 ps ajx|grep mysql
 停止:sudo service mysql stop
 重启:sudo service mysql restart

4、调用形式

SELECT queryChildrenAreaInfo(1);

图片 1

查询id为”4″上边包车型大巴装有节点

SELECT * FROM t_areainfo WHERE FIND_IN_SET(id,queryChildrenAreaInfo(4));

图片 2

   索引分区     

           除了对表的数码集进行分区之外,还能对索引举办分区,
使用同样的函数对表及其索引实行分区平时能够优化质量
       在上边包车型客车第六步中有创制分区索引。

               

 

5、向上递归

DROP FUNCTION IF EXISTS queryChildrenAreaInfo1;
DELIMITER;;
CREATE FUNCTION queryChildrenAreaInfo1(areaId INT)
RETURNS VARCHAR(4000)
BEGIN
DECLARE sTemp VARCHAR(4000);
DECLARE sTempChd VARCHAR(4000);

SET sTemp='$';
SET sTempChd = CAST(areaId AS CHAR);
SET sTemp = CONCAT(sTemp,',',sTempChd);

SELECT parentId INTO sTempChd FROM t_areainfo WHERE id = sTempChd;
WHILE sTempChd <> 0 DO
SET sTemp = CONCAT(sTemp,',',sTempChd);
SELECT parentId INTO sTempChd FROM t_areainfo WHERE id = sTempChd;
END WHILE;
RETURN sTemp;
END
;;
DELIMITER ;

三.制造分区兑现

   在test库 增多四个文件组,
 用于存款和储蓄每一种分区的数目,这里有三个文件组对应八个分区

     
 多个文件组是为了推动优化品质和保证,应使用文件组分离数量。文件组的数目一定程度上由硬件能源决定:一般意况下,文件组数最佳与分区数同样,

   
而且这个文件组常常位于分化的磁盘上(演示有条有限,只在二个磁盘上做逻辑盘贮存)。

1 --第一步:创建四个文件组 
2 alter database test add filegroup ByIdGroup1
3 alter database test add filegroup ByIdGroup2
4 alter database test add filegroup ByIdGroup3
5 alter database test add filegroup ByIdGroup4

--第二步: 创建四个ndf文件,对应到各文件组中,FILENAME文件存储路径
ALTER DATABASE test ADD FILE(
NAME='File1',
FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\testFile1.ndf',
SIZE=5MB,
FILEGROWTH=5MB)
TO FILEGROUP ByIdGroup1

ALTER DATABASE test ADD FILE(
NAME='File2',
FILENAME='E:\testFile2.ndf',
SIZE=5MB,
FILEGROWTH=5MB)
TO FILEGROUP ByIdGroup2

ALTER DATABASE test ADD FILE(
NAME='File3',
FILENAME='E:\testFile3.ndf',
SIZE=5MB,
FILEGROWTH=5MB)
TO FILEGROUP ByIdGroup3


ALTER DATABASE test ADD FILE(
NAME='File4',
FILENAME='E:\testFile4.ndf',
SIZE=5MB,
FILEGROWTH=5MB)
TO FILEGROUP ByIdGroup4

   实施到位后,查看如下图所示:

  图片 3

–第三步:创造分区函数(种种分区的边界值)

 每种会员总括的成品数

图片 4

 

--record: 126797 Partition1 --PRIMARY
SELECT COUNT(1) FROM dbo.Product WHERE UpByMemberID<=1740
--record: 90882 Partition2
SELECT COUNT(1) FROM dbo.Product WHERE UpByMemberID>1740 AND UpByMemberID<=3000
--record: 4999999 Partition3
SELECT COUNT(1) FROM dbo.Product WHERE UpByMemberID>3000 AND UpByMemberID<=9708
--record: 4999999 Partition4
SELECT COUNT(1) FROM dbo.Product WHERE UpByMemberID>9708 AND UpByMemberID<=9709
--record: 2018464 Partition5 ---ByIdGroup4
SELECT COUNT(1) FROM dbo.Product WHERE UpByMemberID>9709

CREATE PARTITION FUNCTION pf_UpByMemberID(int) 
AS RANGE LEFT FOR VALUES (1740,3000,9708,9709)

 

 实行完后如下图所示:

   
 图片 5

 

   –第四步:成立分区方案

CREATE PARTITION SCHEME ps_UpByMemberID
AS PARTITION pf_UpByMemberID TO ([PRIMARY], [ByIdGroup1],[ByIdGroup2],[ByIdGroup3],[ByIdGroup4])

  推行完后如下图所示:

 
  图片 6

 

–第五步:创立分区表

 
 右击要分区的表–>存款和储蓄–>创造分区–>选用分区列(这里UpByMemberID)–>采取分区函数

 
  图片 7

图片 8

图片 9

图片 10

图片 11

 

 

图片 12

–第六步创造分区索引

CREATE NONCLUSTERED INDEX [ixUpByMemberID] ON [dbo].[Product] 
(
    [UpByMemberID] ASC
)
INCLUDE ( [Model]) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON)
GO

图片 13

-- 最后  查看各分区有多少行数据
select $PARTITION.pf_UpByMemberID([UpByMemberID]) as Patition,COUNT(*) countRow from dbo.product
group by $partition.pf_UpByMemberID([UpByMemberID])

   查出有八个分区(带主分区),以及各分区的数据

 
 图片 14

    最终看下是不是用了分区索引

   
  图片 15

 

sql server 分区的优势:

  1. 当表和目录变得老大大时,分区能够将数据分为越来越小、更便于管理的有个别。
  2. 压缩索引维护时间。
  3. 常用的where条件字段做分区依赖是较佳的。
  4. 并行操作获得越来越好的习性,
    能够改善在非常的大型数据集(举个例子数百万行)中实施大范围操作的属性。
  5. 一般情况下,文件组数最佳与分区数一模二样。文件组允许你将次第表放置到不一致的轮廓磁盘上

mysql 数据库的操作

6、调用格局

查询id为”7″的节点的具备上级节点:

SELECT * from t_areainfo where FIND_IN_SET(id,queryChildrenAreaInfo1(7));

图片 16

 

 
  
1.接二连三数据库
  
 mysql -u root -pmysql

 
  不展现密码连接
  
 python@ubuntu:~/Desktop$ mysql -u root -p
  
 Enter password: mysql
 

   
  剥离数据库
     
 ctrl+l:清除命令显示器
  
 quit\exit

2.创建数据库
 create database 数据库名 charset=utf8;
 ### 创制数据库时必供给记得消除编码难点

 

3.查看当前使用的数据库: select database();
  查看所以数据库:  show databases;
  查看当前数据库中全数表: show tabes;
  查看当前表中具备的列: select * from 表名;
  查看表结构:   desc 表名;

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注