php分区表,【MYSQL】分区表

对于MYSQL的态度一直都是会基本SQL和简单命令就行,最近处理一个数据量很大的项目,为了提高效率,在数据库方面的瓶颈上,选择了使用分区表来提高查询效率。至此和大家一起分享一下。 1.引言 本文初略的讲述了mysql数据库如何分区表。 2.环境要求 在5.1版本

对于MYSQL的态度一直都是会基本SQL和简单命令就行,最近处理一个数据量很大的项目,为了提高效率,在数据库方面的瓶颈上,选择了使用分区表来提高查询效率。至此和大家一起分享一下。

1.引言

本文初略的讲述了mysql数据库如何分区表。

2.环境要求

在5.1版本中不是默认就安装了,而在之后版本中一般默认选择了安装分区表支持。可以通过如下方式查看当前数据库是否支持分区表操作:

748eeb9e398e6639dfe53f8450583804.png

使用show variables like '%partition%';如果不支持分区,那么value字段值为No。

3.重要概念描述

3.1 分区字段

1)当仅存在单一主键时,不存在唯一键,那么分区字段必须是主键字段;

2)当存在复合主键时,不存在唯一键,那么分区字段必须是主键组合的一部分字段,一个或多个。

3)当主键和唯一键都存在时,那么分区字段必须同时包括主键字段和唯一键字段。

4.分区表类型

4.1 range分区

1)语法展示:# 语法

# 在创建表单的最后,添加partitions by range(分区字段)(

# partition 分区名 values less than(阀值1),

# partition 分区名 values less than(阀值2),

# ...

# partition 分区名 values less than(阀值n),

# )

示例展示:create table test_range(

id int auto_increment,

description varchar(50),

primary key(id)

) ENGINE=InnoDB auto_increment=1 default charset=utf8

partition by range(id)(

partition p1 values less than(6), #id<6的存放在p1分区

partition p2 values less than(11) #6 <= id < 11 存放在p2分区

);

查看分区情况:show create table test_range;

4fb4a807b64c7e85759c4b5f018043be.png

注意到,在显示的表结构添加了分区表的信息。

数据测试:insert into test_range values(null, "test1");

insert into test_range values(null, "test2");

insert into test_range values(null, "test3");

insert into test_range values(null, "test4");

insert into test_range values(null, "test5");

insert into test_range values(null, "test6");

insert into test_range values(null, "test7");

insert into test_range values(null, "test8");

insert into test_range values(null, "test9");

insert into test_range values(null, "test10");

插入10条数据,此时我们来查看其查询执行过程:

b8012399ed3e852db9bd66af873de93d.png

从结果可以发现,其只是在p1分区执行的查询,那么此时就减少了查询扫描的数据量,从而提高了查询效率。

如果此时,我们插入第11条数据会发生什么情况呢?insert into test_range values(null, "test11");

会发错:insert into test_range values(null, "test11")Error Code: 1526. Table has no partition for value 110.015 sec

原因很简单,因为在我们创建表单时,仅仅指定了1 - 10的id数值分区,当插入id=11时的分区时,此时没有分区提供,那么就引发错误,那么如果解决这样的问题呢,采取如下方式,修改表的分区方式:alter table test_range add partition(

partition p3 values less than(MAXVALUE)

);

# 添加一个分区,也就是p3是id从11到maxValue的存放区域

此时插入id=11的数据,并执行查询解析:

902b00f6bbd4c66c47b468937ae91338.png 发现,已经将其分配到p3分区中了。

还需要特别注意的时,使用partition by range(分区字段),其中的分区字段可以是分区字段的表单式,但是必须是返回的整数,在5.5版本中,可以使用partition by range column/columns语法,指定某个字段。这里不做介绍。大家可以自己尝试一下。

4.2 list分区

list分区可以理解为集合分区方式,意思就是指定某个集合来分区。

语法展示:partition by list(分区字段表达式)(

partition 分区名 values in(value1, value2,...,valuen)#分区集合

);

示例展示:create table test_list(

id int auto_increment,

description varchar(50),

primary key(id)

)ENGINE=InnoDB auto_increment=1 default charset=utf8

partition by list(id)(

partition p1 values in (1, 3, 5, 7, 9),#id=1,3,5,7,9分配至p1区

partition p2 values in (2, 4, 6, 8, 10)#id=2,4,6,8,10分配至p2区

);

#可以如4.1中使用show create table test_list查看表创建结构。

数据测试:使用4.1中数据测试sql,插入10条数据。

71b4e0744c9f18675dfc64a9a25f7845.png 可以发现其查询的仅仅是p1区。如果需要添加分区,可以使用4.1中使用的add partition来添加分区。

4.3 hash分区

使用hash函数得到取模,分配到不同的分区中。分区表达式必须返回整数。

语法展示:partition by hash(分区表达式) partitions 表数量(模数).

示例展示:create table test_hash(

id int auto_increment,

description varchar(50),

primary key(id)

) ENGINE=InnoDB auto_increment=1 default charset=utf8

partition by hash(id) partitions 3; #以id分区,分配到3张表中

数据测试:插入4.1类同10条数据

6d37fbe69a5f405d9a11801e55303f9d.png

你也可以尝试修改id值,查看其分配的分区。hash分区还有一种叫做linear hash线性分区,这里不做介绍,

4.4 key分区

在本次开发中,我选择的是key分区,因为其是针对一个或多个字段作为分区字段,不要求是正整数,其内部调用的是自己的hash函数,计算出hash整数值,然后取模分表。

语法展示:partition by key(分区字段组合) partitions 表数(模数)。

操作和Hash分区一致,这里就不做累赘的展示了。

5.额外扩展

5.1 在实际开发中,经常出现的情况是表已经上线使用,那么必须动态添加分区类型。alter table 表名 partition by hash/key (分区字段表达式) [partitions 表数]#如果不加partitions那么默认为1.

alter table 表名 partition by range/list(分区字段表达式)(具体分区设置)。

5.2 当发现之前的分区需要添加新的分区时,采取如下方式:list/range : alter table 表名 add partition (partition 分区名 [values in|values less than] [集合|数值]);

hash/key : alter table 表名 add partition partitions 表数;

例如:修改上述test_hash的分区数量alter table test_hash add partition partitions 6;

5.3 删除某个分区/删除所有分区# 删除某个分区

list/range : alter table 表名 drop partition 分区名1, 分区名2,...;

#例如:

alter table test_list drop partition p1;

hash/key : 上述语法不成立

# 删除整个分区

alter table test_hash remove partitioning;

还有诸如合并分区,以及5.5的一些新特性,list/range 增加column,columns支持。本文不做过多阐述。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

顶级程序员的心得 Coders at Work (I)

正在读 “Coders at Work”, 对15 位顶级程序员的采访&#xff0c; 总共600页。 从采访的模式看&#xff0c;有点像“艺术人生”&#xff0c; 一般都是音乐起&#xff0c;讲小时候的故事&#xff0c;你怎么开始写程序的? (Brad 同学 5 岁开始写) &#xff1b; 不过后来并没…

顶级程序员的心得 Coders at Work (II)

正在读 “Coders at Work”, 对15 位顶级程序员的采访&#xff0c; 总共600页。 这些看似冗长的问答中有不少精辟的言论。 我摘录了一些关于挑选&#xff0c;面试程序员&#xff0c;优秀程序员的特点&#xff0c;和程序设计的句子。下面是 3 个程序员的心得&#xff0c;和我的…

顶级程序员的心得 Coders at Work (III)

这是第三部分&#xff08;第一&#xff0c;第二部分&#xff09;&#xff0c;非常有意思的问答&#xff0c;值得仔细琢磨。 这里只是一些和程序员发展&#xff0c;面试&#xff0c;优秀程序员的特点等相关的部分。 有些想法和 MSF 中的原则也很相似 &#xff08;见 <移山之…

html留言板 php,linux下使用Apache+php实现留言板功能的网站

一.首先我们的linux服务器上要安装Apache和phpphp的安装方法和Apache方法如同一辙二.关闭防火墙服务&#xff0c;关闭selinux请参考&#xff1a;http://www.cnblogs.com/dagege/p/5947251.html三.我们通过FTP服务或使用rz命令将文件放到Apache的根目录下 /var/www/html示例文件…

顶级程序员的心得 Coders at Work (IV)

( 第一&#xff0c;第二&#xff0c; 第三部分 ) “Coders at Work”, 对15 位顶级程序员的采访&#xff0c; 总共600页。 看似冗长的问答中有不少精辟的言论。 我摘录了一些关于挑选&#xff0c;面试程序员&#xff0c;优秀程序员的特点&#xff0c;和程序设计的句子。下面…

编程之美 - 哪个题目最美?

编辑部搞的活动&#xff0c; 请大家帮个忙&#xff0c;来投票吧&#xff0c;看看《编程之美》第1章“游戏之乐——游戏中碰到的题目”大家最喜欢哪个题目&#xff0c;或者大家认为哪个题目最有趣。         可以选择以下任何网址参与投票&#xff1a;   CSDN&#xff1…

ssl在线申请php源码,简易实现HTTPS之自动实现ssl

众所周知 HTTP 协议是一种不安全的协议&#xff0c; 而 HTTPS 协议是 HTTP over SSL/TLS 的缩写&#xff0c;表示“使用 SSL/TLS 的 HTTP &#xff0c;也就是通常所说的“超文本传输安全协议”。 HTTP 搭配 SSL/TLS 协议可以搭建加密传输、身份认证的网络协议。没有升级到 HTTP…

php怎么上传函数,php上传函数怎么封装

php上传函数怎么封装&#xff1f;<?php //上传文件调用 $file $_FILES[image]; //允许上传的类型 $allow array(image/jpeg, image/png, image/jpg, image/gif); $path ./uploads; $maxsize 1024 * 1024 * 3; $result upload($file, $allow, $error, $path, $maxsize)…

php-frm进程管理,PHP内核探索-进程管理

进程管理方式首先我们了解一下php的三种不同的进程管理方式&#xff1a;static&#xff1a;静态管理进程。在启动时&#xff0c;master按照pm.max_children配置fork出对应数量的work进程&#xff0c;即work的进程是固定不变的。dynamic&#xff1a;动态管理进程。在fpm启动时先…

THU – team players 合作精神

我朝的教育体系虽然时不时灌输“互相帮助”的精神&#xff0c;但是所有小考&#xff0c;中考&#xff0c;大考&#xff0c;无一不是考察个人独立作战。你要互相帮助&#xff0c;不但违反考场纪律&#xff0c;而且其他同学的好成绩对你是一个直接的威胁。 在这种价值体系下产出的…

我写的博客居然是百度搜索第一名 - 感谢国家 …

http://www.baidu.com/s?bs%BD%E1%BB%E9%C2%BC%CF%F1%BA%CD%CF%E0%B2%E1%BC%AF&f8&wd%CE%D2%BA%CD%CB%FB%B5%C4%BD%E1%BB%E9%C2%BC%CF%F1%BA%CD%CF%E0%B2%E1%BC%AF 而且这个“结婚录像和相册集”还在传播中&#xff0c; 刚刚看到 Tao Mei 同学也在他的space 中加上了。…

CSDN 首页的第一屏 广告/新闻 比率 = 40 : 2

有一天我不小心开了 www.csdn.net, 定睛端详许久&#xff0c; 我只看到 2 条新闻 (连线杂志 和 金山震荡) 。 其他的除了两行导航条&#xff0c;都是广告 &#xff08;导航条下面的那一行看似第三条导航条&#xff0c;其实也是广告&#xff09;。 其中右下角的窗口上有六个广…

php 跳板机连接mysql,使用python如何通过跳板机连接MySQL数据库

生产环境中&#xff0c;为了安全起见&#xff0c;大多数的数据库是无法在本地直接访问的&#xff0c;需要先连接跳板机&#xff0c;然后通过跳板机访问。创业天下测试数据库也是采用这种方法连接数据的&#xff0c;那么我们应该怎么通过Python去连接数据库呢&#xff0c;代码如…

去 QCon 学习

他山之石&#xff0c;可以攻玉。就看你的项目有多少“玉”的成分&#xff0c;究竟敢不敢用“石”来攻。 QCon Beijing 2010 | 全球企业开发大会&#xff08;北京站&#xff09; 大会&#xff1a;4 月23 日~4 月25 日&#xff1b;培训&#xff1a;4 月21 日~4 月22 日 大会地点…

Requirements of pair programming

题目&#xff1a;围棋棋谱的特征搜索说明&#xff1a;将用户的棋盘输入作为特征&#xff0c;在棋谱包中读取SGF棋谱&#xff0c;找出特征相符的棋谱。注&#xff1a;不仅要考虑棋子的位置&#xff0c;还要考虑走棋的顺序。对找出的棋谱按照符合程度排序。实现为桌面程序&#x…

电脑系统linux怎么读,Linux怎么读

Linux怎么读Linux是一种操作系统&#xff0c;不过很多朋友都不知道Linux怎么读?Linux正确读法 “哩呐克斯”&#xff0c;音标&#xff1a;[li:nэks] 重音在“哩”上。由于大多数的电脑都是安装Windows&#xff0c;其实也可以安装Linux&#xff0c;不过大家都习惯了Windwos&am…

各个团队的项目评价

Team 10 – Voice Mail 该软件项目构想/计划/实现/创新等方面的优劣&#xff1a; 构想和计划 1. 设计思路清晰&#xff0c;设计说明和文档较全 2. 多种人机交互方式&#xff0c;所以该项目亮点之处就在于其人机交互 实现 3. 设计良好的UI 4. 下载安装Windows XP版本的软…

大家都纷纷指出了 wp7 的优点 …

http://www.windowsphone7.com/ Windows Phone 7 终于快要和大家见面了&#xff01; 下面是各路人士对它的评价: Gizmodo says its a neat, fresh start. CNET thinks the hub system is wonderful SlashGear says this is Microsofts attempt to justify its existence in …

Meeters and Greeters 接客大厅

在上海虹桥机场看到了这个标记 – “接客大厅”。 英库和有关单位最近搞了 “雷人英语” http://engkoo.msn.cn/expo/ 活动, 旨在消灭上海和周边地区的“土产英语”, 这个 “Meeters & Greeters Hall” 英语真是 “顶风作案”, 谁这么大胆? “接客大厅” 在祖国大…

旅游去

September 30 旅游指南新版上线! http://travel.msra.cn http://travel.msra.cn 1. 全新搜索体验 2.旅游目的地推荐 3.全球旅游地支持 4.旅游计划功能 5.丰富的旅游资讯