当前位置:首页 > 日记 > 正文

MySQL表分区的详细解决方案

MySQL表分区的详细解决方案
1。什么是表分区
一般来说,表分区是一个大表分成若干个小表根据条件。MySQL5.1开始支持表分区。
例如:一个用户表有600万多条记录,那么表可以根据条目的日期来划分,表可以根据位置来划分,当然也可以根据其他条件来划分。

两。桌子为什么要被分割
为了提高可伸缩性、可管理性和数据库效率,改进具有各种访问模式的大型表和表的可伸缩性。
分区的一些优点包括:
1)与单个磁盘或文件系统分区相比,可以存储更多数据。
2),对于已经失去意义的存储数据,很容易被删除分区的数据相关的删除这些数据。相反,在某些情况下,添加新数据的过程可以通过添加一个新分区的新数据方便地实施,相关的分区通常其他优点包括这些列在了下面。这些功能在MySQL分区尚未实现,但他们在我们的优先级列表的优先级高。我们希望将这些功能包括在5.1个生产版本中。
3),一些查询可以大大优化,主要通过数据满足了声明,可以只存储在一个或多个分区,所以没有其他剩余的分区可以发现。因为分区可以在创建分区表的修改,所以当第一个分区计划不做,数据可以被重组以提高这些常用的查询效率。
4),涉及汇总等功能和查询()数()可以很容易地并行处理。一个简单的查询的例子是选择salesperson_id,计数(订单)的salesperson_id销售组order_total;。平行,这意味着查询可以同时进行对每个分区,和最终的结果只需要通过所有分区的分区得到的总。
5)分散跨多个磁盘的数据查询,以获得更大的查询吞吐量。

三、分区类型

范围分区:基于属于给定连续区间的列值将多行分配给分区。
列表分区:类似于范围分区,不同的是列表分区是基于与离散值集中的值匹配的列值来选择的。
散列分区:基于用户定义表达式的返回值来选择分区,表达式计算将插入表中的行的列值。这个函数可以包含任何在MySQL中有效的表达式,并生成非负整数值。
密钥分区:类似于哈希分区,区别在于密钥分区只支持一列或多列,而MySQL服务器提供它自己的散列函数。必须有一列或多列包含整数值。

1.range分区

基于一个给定的连续区间的列值,将多个行分配给分区。这些间隔是连续的,不能互相重叠,并且使用小于运算符的值来定义。
复制代码代码如下:创建表员工(
id不是空的,
Fname VARCHAR(30),
Lname VARCHAR(30),
录用日期不为空的默认'1970-01-01,
分离的日期不为空的默认'9999-12-31,
job_code INT NOT NULL,
store_id INT NOT NULL


按范围分区(store_id)(
分区P0值小于(6),
分区P1值小于(11),
分区P2值小于(16),
分区P3值小于(21)
);

根据这种划分方案,所有的行对应的员工从1到5在店里放在分区P0,并存储6到10名员工被关在P1,依次类推。注意每个分区是从最低阶定义为最高。这是由语法的范围分区的要求;在这个意义上,它类似于开关…在C和java的case语句。
一个新的行包含数据(72,'michael ','widenius ','1998-06-25,null,13),它可以很容易地确定它将插入P2分区。但是如果添加了第二十一的商店会发生什么呢根据这样的方案,因为没有规则的存储,store_id超过20家门店,服务器将不知道在哪里保存的线,这将导致错误。为了避免这样的错误,你可以使用一个包罗万象的值小于在创建表的语句,这是提供给所有的值是大于指定的最大值。
复制代码代码如下:创建表员工(
id不是空的,
Fname VARCHAR(30),
Lname VARCHAR(30),
录用日期不为空的默认'1970-01-01,
分离的日期不为空的默认'9999-12-31,
job_code INT NOT NULL,
store_id INT NOT NULL


按范围分区(store_id)(
分区P0值小于(6),
分区P1值小于(11),
分区P2值小于(16),
p3分区值小于最大
);
MAXVALUE代表最大可能的整数值。现在的store_id列值大于或等于16的所有行(最高值定义)将保存在分区P3。在将来的某个时间,当门店数量增加到了25, 30,甚至更多,你可以使用ALTER TABLE语句添加新的分区存储21-25,26-30,等。
在几乎相同的结构,也可以拆表基于员工的工作程序,即基于job_code列值的连续区间。例如,假设2位数代码是用来表示一般的工人(店),三数字代码代表办事处和支持人员,四的数字代码代表的管理水平,你可以使用下面的语句创建分区表:
复制代码代码如下:创建表员工(
id不是空的,
Fname VARCHAR(30),
Lname VARCHAR(30),
录用日期不为空的默认'1970-01-01,
分离的日期不为空的默认'9999-12-31,
job_code INT NOT NULL,
store_id INT NOT NULL


按范围分区(job_code)(
分区P0值小于(100),
分区P1值小于(1000),
分区P2值小于(10000)
);
在这种情况下,店内所有相关人员将被保存在分区P0,所有行保证办公室和支持相关人员被划分在P1,和所有相关的行保证管理层被划分在P2。
它也可以使用一个表达式的值小于条款。这里最显著的限制是,MySQL必须能够计算表达式的返回值为小于的比较部分(<<);因此,该表达式的值不能为空。为此,雇佣,分离,job_code,和员工表store_id列已被定义为非空(非空)。
除了将表格数据根据商店数量,你也可以使用基于一个日期表达式(日期)拆表数据。例如,假设你想分裂的基础上每年每个员工离开公司,这是表,今年的价值(分离),创建表的语句实现此分区模式为例:
复制代码代码如下:创建表员工(
id不是空的,
Fname VARCHAR(30),
Lname VARCHAR(30),
录用日期不为空的默认'1970-01-01,
分离的日期不为空的默认'9999-12-31,
job_code int,
store_id int


按范围划分(年份(分隔))
分区P0值小于(1991),
分区P1值小于(1996),
分区P2值小于(2001),
p3分区值小于最大
);
在这个方案中,所有的员工在1991之前的工作记录存储在P0分区,所有员工的记录,在1991到1995的就业期间保存在P1分区,所有员工的记录,在1996到2000的就业期间保存在P2分区,所有雇用2000存储在P3信息后。
范围分区在下列场合中特别有用:
1),当你需要删除一个分区的旧数据,只删除分区。如果你使用最近的分区方案,你只需使用表分区P0删除所有员工,所有员工都停止了工作之前,1991对应的线,大量的表的行,运行删除从员工那里一年比(分离)< = 1990;删除查询更有效。
2),希望使用包含日期或时间值的列,或包含从其他系列开始增长的值。
3)、正常运行直接取决于用于拆分表列的查询,例如,当执行一个选择如计数(*)的员工,年(分开)= 2000组store_id;这样的查询,MySQL可以快速确定分区P2只需要扫描,这是因为其余的分区不符合任何记录可能包含WHERE子句。
注意:MySQL 5.1源程序中没有启用这种优化,但工作正在进行中。

2.list分区

与范围分区类似,不同的是列表分区基于一个列值,该值匹配一个离散值集合中的值以供选择。
通过使用列表分区表的分区(expr)来实现,在expr是一个列值或值的列,并返回一个整型值的表达式,然后通过值(value_list)对每个分区的定义方法,它是由一个逗号分隔的整数value_list。
注意:在MySQL 5.1中,当使用列表分区时,只可能匹配整数列表。
复制代码代码如下:创建表员工(
id不是空的,
Fname VARCHAR(30),
Lname VARCHAR(30),
录用日期不为空的默认'1970-01-01,
分离的日期不为空的默认'9999-12-31,
job_code int,
store_id int
);
假定有20个音像商店分布在4个经销权领域,如下表所示:
====================
地区商店ID
------------------------------------
北区3, 5, 6,9, 17
东部地区1, 2, 10,11, 19, 20
西区4, 12, 13,14, 18
中部地区7, 8, 15,16
====================
您可以使用以下创建表语句以同一分区中属于同一区域存储的方式来划分表。
复制代码代码如下:创建表员工(
id不是空的,
Fname VARCHAR(30),
Lname VARCHAR(30),
录用日期不为空的默认'1970-01-01,
分离的日期不为空的默认'9999-12-31,
job_code int,
store_id int


列表分区(store_id)
分区pnorth值(3,5,6,9,17),
分区peast值(1,2,10,11,19,20),
分区pwest值(4,12,13,14,18),
分区pcentral值(7,8,15,16)
);

这使得它更容易添加或删除员工记录在指定的地区表中。例如,假定在欧美地区所有的音频和视频商店出售给其他公司。然后所有记录在西方音乐商店员工的相关工作(线)可用来查询表员工的分区pwest;删除它,并具有相同的功能(删除)删除查询删除查询删除员工在store_id在(4,12,13,14,18);它是有效得多。
{ }:如果尝试将列值(或分区表达式的返回值)插入分区值列表中的一行中,则插入查询将失败并不能报告:
复制代码代码如下:插入员工价值(224,'linus ','torvalds ','2002-05-01 ','2004-10-12 ',42, 21);
这是因为store_id列值21不能用于定义分区pnorth,值列表中找到peast,pwest,或pcentral。需要注意的是,在分区列表中没有定义如值小于最大值很重要,它包含其他值。要匹配的值必须在任何值列表中找到的。

列表分区可以生成与范围分区相结合的复合子分区。将哈希和密钥分区结合起来生成复合分区是可能的。

3.hash分区

一种基于用户定义表达式返回值的选择分区,它使用要插入到表中的行的值来计算。这个函数可以包含任何在MySQL中有效的表达式,并生成非负整数值。
与哈希分区表的分区,通过哈希函数添加一个分区(expr)在创建表的语句,其中表达式,返回一个整数的表达。它只能是一列字段类型MySQL整数的名称。另外,你可能需要添加一个分区数条款后,在Num是一个非负整数,表明该表将被分配到分区。
复制代码代码如下:创建表员工(
id不是空的,
Fname VARCHAR(30),
Lname VARCHAR(30),
录用日期不为空的默认'1970-01-01,
分离的日期不为空的默认'9999-12-31,
job_code int,
store_id int

散列分区法(store_id)
分区4;

如果分区子句是不包括在内,分区的数量将被默认为1。例外:对于NDB集群(Cluster)表,默认分区的数量将作为集群节点数目相同的数据。
这种修改可能会考虑任何max_rows设置确保所有行可适当插入分区。
1)班轮散列
MySQL还支持线性散列函数。它与线性散列函数的线性2幂(两幂)运算规则的传统哈希不同,而传统散列使用散列函数值的模。
线性散列分区与传统散列分区的唯一语法区别是,线性关键字被添加到分区子句中。
复制代码代码如下:创建表员工(
id不是空的,
Fname VARCHAR(30),
Lname VARCHAR(30),
录用日期不为空的默认'1970-01-01,
分离的日期不为空的默认'9999-12-31,
job_code int,
store_id int

线性散列(年(租))分区
分区4;

假设一个表达式expr,使用线性散列函数时,记录被保存的分区划分n num分区,N是根据下面的算法得到的。
1。找到2下的力量大于数,我们称这个值V,这可以通过以下公式计算:
2。v =电源(2,天花板(日志(2,努姆)))
(例如,假定数字是13。所以日志(2,13)是3.7004397181411.ceiling(3.7004397181411)为4,则V =功率(2,4),等于16)。
三.设n = f(column_list)(V 1)。
4。当n =:
。套细胞(V / V = 2)
。设置n=n(v - 1)
例如,使用线性哈希分区并有4个分区的假设表t1是由以下语句创建的:
创建表T1(col1 int,char(5),col2 col3日期)
通过线性哈希分区(年(COL3))
分区6;
现在假设你想插入两行到表T1,其中记录了'2003-04-14 ' col3列值,而其他col3列值为'1998-10-19 ',第一个记录被保存到分区是确定如下:
复制代码如下:V =功率(2,吸(log(2,7)))= 8
N =年('2003-04-14 ')(8-1)
= 20037
= 3
(3或6(假):错误的记录将被保存到# 3分区)
第二个记录将保存要保存的分区号的数目如下:
复制代码如下:v=8
N =年('1998-10-19 ')(8-1)
= 19987
= 6
(6 > = 4是true(true):需要额外的步骤)
n = 6上限(5 2)
= 63
= 2

(2或4(假):错误的记录将被保存到# 2分区)
根据线性哈希分区的优势,添加、删除、合并和拆分分区将越来越有助于处理表包含大量(1000处)的数据,其缺点是使用和应用
与传统哈希分区获得的数据分布相比,不同分区之间的数据分布不太可能保持平衡。

4.ksy分区

与散列分区类似,不同的是键分区只支持一列或多列,而MySQL服务器提供它自己的散列函数。必须有一列或多列包含整数值。
复制代码代码如下:创建表TK(
2 int不空,
COL2 char(5),
col3日期

通过线性关键分区(COL1)
分区3;

在密钥分区中,关键字线性的使用与哈希分区中使用的相同。分区的数目是通过2个幂(两个幂)算法得到的,而不是通过模算法得到的。

相关文章

MySQL存储引擎特性综述

MySQL存储引擎特性综述

综述,存储引擎,特性,电脑软件,MySQL,几种常用存储引擎的特点 这里我们重点讨论几种常用的存储引擎,比较各种存储引擎的差异以及使用它们的方法。 特征 MyISAM BDB 记忆 InnoDB 档案文件 存储限制 不, 不, 是的 64tb 不, 交易安全 支持 支…

msqry32.exe的过程是什么该msqry32

msqry32.exe的过程是什么该msqry32

查询,过程,功能,电脑软件,exe,评论:详细的介绍了msqry32.exe - msqry32过程 进程文件:msqry32或msqry32.exe 过程名:微软查询 过程类别:安全风险的过程 英文描述: msqry32.exe是一个过程,属于产品的微软Office家庭和涉及微软查询,一个工具,可以导…

oracle数据库中临时数据的处理方法

oracle数据库中临时数据的处理方法

处理方法,数据,数据库中,电脑软件,oracle,如果用户查询,按排序语句的语句由雇员号来排序,那么排序之后生成的所有记录都是临时数据。Oracle数据库如何处理这些临时数据 通常情况下,Oracle数据库存储这些临时数据在PGA(程序全局区)的记忆。在程序…

对icqlite处理查询功能进行了详细

对icqlite处理查询功能进行了详细

进行了,查询功能,过程,详细,电脑软件,点评:icqlite.exe是简化版本的ICQ的即时通讯软件相关程序 进程文件:icqlite或icqlite.exe 进程名称:ICQ Lite 过程类别:安全风险的过程 英文描述: icqlite.exe是一个应用的Lite版本,相关过程的精简版,它也被…

powerpoint2010链接在网站上的视频

powerpoint2010链接在网站上的视频

链接,网站,视频文件,电脑软件,如何powerpoint2010链接到视频文件的网站吗它可以链接到本地驱动器上的视频文件或上传到网站的视频文件(如YouTube或Hulu)。 要点:在链接到、使用或分发未由你创建的版权内容之前,确保已获得所有者的权限。 1,在幻…

PHPclearstatcache()函数详解

PHPclearstatcache()函数详解

函数,详解,电脑软件,PHPclearstatcache,定义和用法 该clearstatcache功能()函数来清除文件状态缓存。 PHP缓存的数据是一个更快、更好的运行功能非常有益。如果文件已经在脚本测试了很多次,你可以禁止缓存的正确结果。要做到这一点,你可以使用c…

Win8.1的浏览器不能上网的解决小技

Win8.1的浏览器不能上网的解决小技

浏览器,小技巧,电脑软件,点评:有很多爱尝鲜的朋友直接升级到Win8.1,但毕竟是一个新的系统,有很多地方不完善,比如Win8.1浏览器上不去网,怎么办下面详细介绍一下,有兴趣的朋友不要错过。 Win8.1发布以来的流行,许多早期采用者爱的朋友更是直接升级…

QQ朋友找不到你的隐形七绝招

QQ朋友找不到你的隐形七绝招

找不到,绝招,朋友,电脑软件,QQ,QQ不仅仅是一个互联网上的聊天工具,也是一种无线寻呼功能,发送短消息和发送文件,等了很久,QQ上的争论从来没有停止过。无数高手研究的最高水平,比如让QQ显示对方的IP地址,并让QQ添加自己的朋友,等等,这是最有趣的话题…

Win8系统如何自定义电源按钮教程

Win8系统如何自定义电源按钮教程

系统,教程,自定义,按钮,电源,注释:自定义电源按钮可能不会有很多朋友。事实上,这很简单。在本文中,我们将为您详细介绍特定的定制过程。有兴趣的朋友可以参考一下。 Win8自定义电源按钮如下: 1、在桌面(非Metro界面),按键盘上的windows和x键打开…

oracle的一些技巧技巧

oracle的一些技巧技巧

技巧,电脑软件,oracle,最近,很多人讨论了Oracle的安全问题。今天,我们找到了一些学习的信息。 获取Oracle当前会话的一些属性(这对SQL注入的环境判断非常有用) 该sys_context函数返回与上下文命名空间关联的属性值。此功能可用于SQL和PL / SQ…

Win8安装驱动提示文件可能已被破坏

Win8安装驱动提示文件可能已被破坏

文件,安装,提示,已被,电脑软件,点评:Win8安装驱动提示文件的哈希值不在指定的目录中的文件。此文件可能被损坏或篡改。详细的解决方案如下。有类似问题的朋友可以参考这篇文章。 Win8安装驱动提示文件的哈希值不在指定的目录中的文件,该文件…

Oracle回收站的状态查询安排

Oracle回收站的状态查询安排

查询,状态,回收站,电脑软件,Oracle,原则上,Recycle Bin是一个数据字典表,放置用户删除(滴)的数据库对象信息,用户删除的对象不会被数据库删除,它仍然占用空间。除非用户手动清除,或者由于存储空间不够,数据库才被删除。 在Oracle 10g数据库中,介绍…