首页 / MYSQL / mysql分区及实例演示
mysql分区及实例演示
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql分区及实例演示,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2657字,纯文字阅读大概需要4分钟。
内容图文
一、为什么要分区?
需求:大数据。解决方案:分而治之,更细一点即为。将大表和大索引分为一个更小的操作单元
在mysql中,分区允许将表、索引和索引编排表细分为更小的单元。分区后,每个分区有自己单独的名称。对于DBA来讲,这些分区可以统一管理,也可以分开管理。
但是对于应用程序来讲,分区的表和没有分区的表示一样的。换句话来讲,分区对于应用是透明的,只是数据库对于数据的重新整理。
Mysql分区,这个是mysql对于分区的官方解释。
1.分区的作用
a)提升性能
应该说,几乎所有分区的目的都是用来提升性能的。不是谁哪天早上吃着鸡蛋灌饼,说咱们分个区玩玩吧!不是的。那么分区是如何来提升检索数据的性能的呢?没有分区之前,数据每次在查询和检索总是面向的是整个数据库和表。分区之后,mysql针对每个分区生成特定的数据文件与索引文件。每次只会检索特定的部分数据,因此可以更好的来执行和维护数据库。究其原因还是因为在分区之后表指派到不同的物理驱动器上,这样便可在同时访问多个分区时减少物理 I/O 争用。
b)易于管理
对于一些无用的冗余的历史数据来讲,可以根据分区之后直接删除相应的分区。操作起来更加简便,因为执行数以万计的数据远比直接删除文件来的困难的多、时间也更加的长。
c)容错
分区之后相比分区之前,一张表从之前一个文件分为现在的三个文件。分区之后即使一个文件出现破坏,也不会影响其他数据。
2..常用分区方法
RANGE分区
LIST分区
HASH分区
KEY分区
二、如何分区?
1.查看数据库是否支持分区
SHOW VARIABLES LIKE ‘%partition%‘;
对于mysql来讲,现阶段支持分区操作的版本有5.1和5.5.如图显示为YES则表明该数据库支持分区操作。
2.四种常见分区
Range分区
俗称:范围分区。根据表的字段的值,依据给定某段连续的区间来分区。
直接创建表时分区
create table teacher (id varchar(20) not null , name varchar(20), age varchar(20), birthdate date not null, salary int ) partition by range(year(birthdate)) ( partition p1 values less than (1970), partition p2 values less than (1990), partition p3 values less than maxvalue );
Ps:创建teacher表,并在创建teacher表同时根据birthdate字段将表划分为p1、p2、p3三个分区。
在创建表后分区
ALTER TABLE teacher partition by range(year(birthdate)) ( partition p1 values less than (1970), partition p2 values less than (1990), partition p3 values less than maxvalue );
Ps:给已经创建了的表分区,分为p1、p2、p3.
LIST分区
俗名:列表分区。其实list分区和range分区应该说都是一样的,不同的是range分区在分区是的依据是一段连续的区间;而list分区针对的分区依据是一组分布的散列值。
create table student (id varchar(20) not null , studentno int(20) not null, name varchar(20), age varchar(20) ) partition by list(studentno) ( partition p1 values in (1,2,3,4), partition p2 values in (5,6,7,8), partition p3 values in (9,10,11) );
Ps:如上创建表student,并将student表分为p1、p2、p3三个分区。需要注意的是一般情况下,针对表的分区字段为int等数值类型。
HASH分区
小名:哈希分区。哈希分区主要是依据表的某个字段以及指定分区的数量。
create table user ( id int(20) not null, role varchar(20) not null, description varchar(50) ) partition by hash(id) partitions 10;
Ps:如上创建user表,并将user表平均分为十个分区。比较有限制的就是需要知道表的数据有多少才能更好平均分配分区。
key分区
类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值。
create table role( id int(20) not null,name varchar(20) not null) partition by linear key(id) partitions 10;
3.分区表管理
对指定表添加分区
alter table user add partition(partition p4 values less than MAXVALUE);
删除指定表指定分区
alter table student drop partition p1;
创建子分区
create table role_subp(id int(20) not null,name int(20) not null) partition by list(id) subpartition by hash(name) subpartitions 3 ( partition p1 values in(10), partition p2 values in(20) )
复合分区
alter table user reorganize partition p1,p3 into (partition p1 values less than (1000));
原文:http://www.cnblogs.com/wanghuaijun/p/5846584.html
内容总结
以上是互联网集市为您收集整理的mysql分区及实例演示全部内容,希望文章能够帮你解决mysql分区及实例演示所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。