MySQL数据库分区(Database partition)

<blockquote><h4>认识数据库分区</h4></blockquote>

       数据库分区是一种物理数据库设计技术,DBA和数据库建模人员对其相当熟悉。虽然分区技术可以实现很多效果,但其主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。
<blockquote><h4>数据库分区优势</h4></blockquote>

<h4>性能的提升(Increased performance)</h4>

       在扫描操作中,如果MySQL的优化器知道哪个分区中才包含特定查询中需要的数据,它就能直接去扫描那些分区的数据,而不用浪费很多时间扫描不需要的地方了。需要举个例子?好啊,百万行的表划分为10个分区,每个分区就包含十万行数据,那么查询分区需要的时间仅仅是全表扫描的十分之一了,很明显的对比。同时对十万行的表建立索引的速度也会比百万行的快得多得多。如果你能把这些分区建立在不同的磁盘上,这时候的I/O读写速度就“不堪设想”(没用错词,真的太快了,理论上100倍的速度提升啊,这是多么快的响应速度啊,所以有点不堪设想了)了。

<h4>对数据管理的简化</h4>

       分区技术可以让DBA对数据的管理能力提升。通过优良的分区,DBA可以简化特定数据操作的执行方式。例如:DBA在对某些分区的内容进行删除的同时能保证余下的分区的数据完整性(这是跟对表的数据删除这种大动作做比较的)。
此外分区是由MySQL系统直接管理的,DBA不需要手工的去划分和维护。例如:这个例如没意思,不讲了,如果你是DBA,只要你划分了分区,以后你就不用管了就是了。
<blockquote><h4>数据库分区形式</h4></blockquote>

<h4>水平分区(HorizontalPartitioning)</h4>

       水平分区是对表的行进行分区,每个分区的列是一样的,我们可以通过年龄、日期、自增主键……
<h4>垂直分区(VerticalPartitioning)</h4>

       垂直分区是对表的列进行分区,减少表的宽度,使某些特定的列在特定的分区,提高查询效率,查看是否支持垂直分区。

show variables like '%partition%'; 

<blockquote><h4>数据库分区类型</h4></blockquote>

<h4>RANGE分区</h4>

       基于连续区间的列值进行分区(日期、自增主键)
<h4>LIST分区</h4>

       类似于RANGE分区,LIST分区是基于列值匹配一个离散值集合中的某个值来选择
<h4>HASH分区</h4>

       基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包括MySQL中有效的、产生非负整数值的任何表达式。
<h4>KEY分区</h4>

       类似于HASH分区,KEY分区只支持计算一列或多列,且MySQL服务器支持自身的哈希函数。必须有一列或多列包含整数值。
<h4>复合分区</h4>

       基于RANGE/LIST类型的分区表中每个分区的再次分割。子分区可以使HASH/KEY等类型
<blockquote><h4>MySQL分区实例</h4></blockquote>

<h4>RANGE分区</h4>

根据自增主键ID为依据做范围分区

create table user(
id int primary key auto_increment,
username varchar(20) ,
age int
)
partition by rang(id)
(
partition p1 values less than(100),
partition p2 values less than(200),
partition p3 values less maxvalue
);

<h4>LIST分区</h4>

以性别为分区依据,做LIST分区

create table user(
id int primary key auto_increment,
username varchar(20) ,
age int,
sex int,   -- 0:女 1:男 2:保密
primary key(id,sex)
)
partition by list(sex)
(
partition p1 values in (0),
partition p2 values in (1),
partition p3 values in (2)  
)

<h4>HASH分区(只需要指定分区的列名、表达式和分区的数量)</h4>

以性别为分区依据,做HASH分区,分区数量为3

create table user(
id int primary key auto_increment,
username varchar(20) ,
age int,
sex int,   -- 0:女 1:男 2:保密
primary key (id,sex)
)
partition by hash(sex)
partitions 3;

<h4>KEY分区(类似于HASH分区)</h4>

以性别为分区依据,做HASH分区,分区数量为3

create table user(
id int primary key auto_increment,
username varchar(20) ,
age int,
sex int,   -- 0:女 1:男 2:保密
primary key(id,sex)
)
partition by key(sex)
partitions 3;

<h4>复合分区(RANGE/HASH)</h4>

create table user(
id int  auto_increment,
username varchar(20) ,
age int,
sex int,   -- 0:女 1:男 2:保密
primary key(id,sex)
)
partition by range(id)
subpartition by hash(sex)
subpartitions 3
(
partition p1 value less than (200),
partition p2 value less than maxvalue
);

<blockquote><h4>数据库分区的操作</h4></blockquote>
<h4>删除分区</h4>

alter table user drop partition p1;  不能删除HASH或者KEY分区
alter table user drop partition p1,p2;

<h4>增加分区</h4>

alter table user add partition (partition p4 values less than (300));
alter table user add partition (partition p4 value in (3));

<h4>分解分区</h4>

alter table user reorganize partition p1 into
(
partition p1 values less than (50),
partition p4 values less than (100)
)--分区分解不会丢失数据

<h4>合并分区</h4>

alter table user reorganize partition p1,p4 into(partition p1 values less than (100));

<h4>删除表的所有分区</h4>

alter table user remove partitioing;

<h4>重建分区</h4>

            alter table user rebuild partition p1,p2;

<h4>优化分区</h4>

            alter table user optimize partition p1,p2;

<h4>分析分区</h4>

            alter table user analyze partition p1,p2;

<h4>修补分区</h4>

            alter table user repair partition p1,p2;

<h4>检查分区</h4>

            alter table user check partition p1,p2; 

<blockquote><h4>查看分区表信息</h4></blockquote>
<h4>查看创建分区表的语句</h4>

show create table user;

<h4>查看表是不是分区表</h4>

show table status;

<h4>查看分区信息</h4>

select partition_name part,partition_expression expr,partition_description descr,table_rows from information_schema.partitions where table_schema=schema() and table_name='user';
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容