【MySQL高级特性】高性能MySQL第七章
2017-07-25 14:15:43
前言:MYSQL从5.0和5.1版本开始引入了很多高级特性,例如分区、触发器等,这对有其他关系型数据库使用
背景的用户来说可能并不陌生。这些新特性吸引了很多用户开始使用MYSQL。不过,这些特性的性能到底如何,
还需要用户真正使用过才能知道。
1.1分区表
对用户来说,分区表是一个独立的逻辑表,但是底层由多个物理子表组成。实现分区的代码实际上是对一组
底层表的句柄对象(Handler Object)的封装。
对分区表的请求,都会通过句柄对象转化成对存储引擎的接口调用。
所以分区对于SQL层来说是一个完全封装底层实现的黑盒子,对应用是透明的,但是从底层的文件系统来看就很容易发现,每一个分区表都有一个使用#分隔命名的表文件。
MYSQL实现分区表的方式——对底层表的封装——意味着索引也是按照分区的子表定义的,而没有全局索引。
(问:全局索引是什么? 答:)这和Oracle不同,在Oracle中可以更加灵活地定义索引和表是否进行分区。
MYSQL在创建表时使用PARTITHON BY 字句定义每个分区存放的数据。在执行查询的时候,优化器会根据分区定义
过滤哪些没有我们需要数据的分区。这样查询就无需扫描所有分区——只需要查找包含需要数据的分区就可以了。
分区的一个主要目的是将数据按照一个较粗的力度分在不同的表中。这样做可以将相关的数据放在一起。另外,如果
像一次批量删除整个分区的数据也会变得很方便。
在下面的场景中,分区可以起到非常大的作用:
a.表非常大以至于无法全部都放在内存中,或者只在表的最后部分有热点数据,其他均是历史数据。
b.分区表的数据更容易维护。例如,像批量删除大量数据可以使用清楚整个分区的方式。另外,还可以对一个独立分区进行优化、检查、修复等操作。
c.分区表的数据可以分布在不同的物理设备上,从而高效的利用多个硬件设备。
d.可以使用分区表来避免某些特殊的瓶颈,例如InnoDB的单个索引的互斥访问、ext3文件系统的inode锁竞争等。
e.如果需要,还可以备份和恢复队独立分区,这在非常大的数据集的场景下效果非常好。
MYSQL的分区实现非常复杂,这里专注在分区性能方面,如果想跟多了解,建议阅读MYSQL官方手册“分区”一节
可以通过使用SHOW VARIABLES命令来确定MYSQL是否支持分区
分区本身也有一些限制,下面是其中比较重要的几点:
a.一个表最多只能有1024个分区。
b.在MYSQL5.1中,分区表达式必须是整数,或者是返回整数的表达式。在MYSQL5.5中某些场景中可以直接
使用列来分区。
c.如果分区字段中有主键或者唯一索引的列,那么所有主键列和唯一索引列都必须包含进来
d.分区表中无法使用外键约束。(外键:)
1.1.1分区表的原理
分区表由多个相关的底层表实现,这些底层表也是由句柄对象表示,所以我们也可以直接访问各个分区。
存储引擎管理分区的各个底层和管理普通表一样(所有的底层表必须使用相同的存储引擎),分区表的
索引只是在各个底层表上各自加上一个完全相同的索引,从存储引擎的角度来看,底层表和一个普通表没有
任何不同,存储引擎也无需知道这是一个普通表还是一个分区表的一部分。
最新文章
- 在IHttpHandler中获取session
- Junity测试最大子数列和的Java程序
- Linux老是提示compat-libstdc++ is not installed的原因
- Flappy Bird (Java实现)
- python类及其方法
- Highlighting System
- 常用 SQL 语句
- php mcrypt 完全安装
- Excel2007条件格式怎么用
- DM 之 全解析
- WEB应用中的SESSION知多少?
- 8款替代Dreamweaver的开源网页开发工具
- apache2.4配置虚拟目录
- FreeBSD ipfw App配置Examples
- asp.net如何删除文件夹及文件内容操作
- 分布式事务解决方案FESCAR
- 关于Ubuntu使用笔记
- NOIP2007奖学金题解——洛谷1093
- python---定义一个session类(无错)
- tomcat下部署应用helloworld
热门文章
- 【[HAOI2011]向量】
- thinkphp3.2.3代码审计
- 【转】CopyOnWriteArrayList
- 阅读基于sketch的软件定义网络测量数据平面硬件模型
- winrar 弹窗处理
- Java导包后在测试类中执行正确但在Servlet中执行错误报ClassNotFoundException或者ClassDefNotFoundException解决办法
- css 中的 initial inherit unset 意思
- 关于JQuery的异步注册
- 三、spring成长之路——springIOC容器详解(上)
- [译]C语言实现一个简易的Hash table(1)