高性能MySQL--第七章 MySQL高级特性

1.分区表,一个独立的逻辑表,底层由多个物理表组成。Mysql创建表时使用PARTITION BY子句定义每个分区存放的数据。分区的一个主要目的是将数据按照一个较粗的粒度分在不同的表中,将相关的数据存放在一起。

使用场景:(1)表非常大以至于无法全部放在内存中,或者只在表的最后部分有热点数据,其他都是历史数据。(2)分区表是数据更容易维护。如批量删除大量数据可以通过清楚整个分区的方式,还可以对一个独立分区进行优化、检测、修复等操作。(3)分区表的数据可以分布在不同物理设备上,从而高效地利用多个硬件设备。(4)可以使用分区表来避免某些特殊的瓶颈,如InnoDB的单个索引的互斥访问、ext3文件系统的inode锁竞争等。(5)可以备份和恢复独立的分区。

分区表的限制:(1)一个表最多只能有1024个分区。(2)MySQL5.1中,分区表达式必须是整数,或是返回整数的表达式。MySQL5.5中,某些场景可以直接使用列来进行分区。(3)如果分区字段有主键或唯一索引的列,那么所有主键列和唯一索引列都必须包含进来。(4)分区表无法使用外键约束。

增删改查时,分区层先打开并锁住所有的底层表,然后优化层过滤分区,确定分区,再调用对应的存储引擎接口访问分区的数据。

分区策略:(1)全量扫描数据,不要任何索引。(2)索引数据,并分离热点。

访问分区表,要在WHERE条件中带入分区列,即使看似多余也要带上,从而过滤掉无需访问的分区。

MySQL只能在使用分区函数的列本身进行比较时才能过滤分区。即便在创建分区时可以使用表达式,但在查询时只能根据列来过滤分区。

2.视图

视图本身是一个虚拟表,不存放任何数据。 

可更新视图。

3.外键约束

InnoDB是MySQL中支持外键但内置存储引擎。每次在修改数据时都要在另外一张表中多执行一次查找操作。如果只是使用外键做约束,通常在应用程序里实现约束会更好。外键会带来很大的额外消耗。

4.在MySQL内部存储代码

MySQL允许通过触发器、存储过程、函数的形式来存储代码。还可以在定时任务(事件)中存放代码。存储任务和存储函数都被统称为“存储程序”。

5.游标

MySQL在服务器端提供只读的、单向的游标,而且只能在存储过程或更底层的客户端API中使用。

6.绑定变量prepared statement

7.用户自定义函数(UDF)

8.插件:存储过程插件,后台插件,INFORMATION_SCHEMA插件,全文解析插件,审计插件,认证插件

9,字符集合和校对

10.全文索引

11.分布式(XA)事务

12。查询缓存

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页