MySQL高级特性
1. 分区表
分区表是一个独立的逻辑表,底层由多个物理表组成。实现代码实际是一组底层表的句柄对象。分区的一个主要目的是将数据按照一个较粗的粒度分在不同的表中,这样可以将相关的数据存放在一起。
1.1 作用
- 表非常大以至于无法全部存放于内存中,或者最后的是热点数据其他是历史数据
- 分区表的数据更容易维护。
- 分区表的数据可以分布在不同的物理设备上,从而高效地利用多个硬件设备。
- 使用分区表避免某些特殊的瓶颈。
1.2 分区语法
Partition by
1.3 优点
可以通过分区函数过了一些分区,可以让查询扫描更少的数据。
2. 视图
视图是一个虚拟表,不存放任何数据,在使用sql访问视图的时候,它返回的数据是mysql从其他表中生成的。不能使用视图创建触发器,也不能通过drop table 删除视图。
2.1 mysql通过两种方式中的任何一种处理视图:
- 合并算法
- 临时表算法
2.2 可更新视图
可以通过更新这个视图来更新视图涉及的相关表。
3. 外键约束
InnoDB是目前mysql中唯一支持外键的内置存储引擎。
4. 在MySQL内部存储代码
mysql允许通过触发器、存储过程、函数、事件的形式存储代码。
4.1 优点:
- 在服务器内部执行,你数据将,节省带宽和网络延迟
- 代码重用
- 简化代码的维护和版本更新
- 提升安全,常见例子是银行用于转移资金的存储过程
- 服务器可以换成存储过程的执行计划,降低消耗
4.2 缺点:
- 较难编写
- 存储代码的效率较低
- 给应用程序代码的部署带来额外的复杂性。
- 存储过程会给服务器增加额外的压力,而数据库的服务器的扩展性相比其他应用服务器要差。
5. 游标
mysql在服务器端提供只读的、单向的游标,而且只能在存储过程或者更底层的客户端api中使用。
6. 全文索引
全文索引可以支持跟踪字符内容的搜索,也支持自然语言搜索和布尔搜索。通过match against来区分查询是否使用全文索引。
7. 分布式事务
存储引擎的事物特性能保证在存储引擎级别实现acid,二分不是事物让存储引擎级别的acid可以拓展到数据库层面,甚至可以扩展到多个数据库之间,这需要二阶段的提交实现。
XA事务中需要一个事务协调器来保证所有的事务参与者都完成了准备工作(第一阶段)。如果协调器收到所有的参与者都准备好的消息,就好告诉所有的事务可以提交了。
参考文章:高性能MYSQL(高级特性)