第七章 读【MySql高级特性——分区】有感

高级特性:分区、视图、外键、存储过程(触发器、存储函数和事件)、绑定变量、插件、字符集、全文索引、XA事务(分布式事务)、查询缓存。

一、分区

对用户来说,分区表是一张逻辑表,但是底部由多个物理子表组成。意味着索引也按照分区子表定义,没有全局索引。

1、分区的作用

  • 表数据非常多,无法全部加载到内存中,或者有热点数据,其他的是历史数据。
  • 分区表的数据更加容易维护。(对单独一个分区进行CURD)
  • 分区表的数据可以分布到不同的物理设备上,高效利用硬件设备。

2、分区的限制

  • 一张表最多有1024个分区
  • 按列分区,或分区表达式必须返回整数
  • 如果分区的列包含主键或索引,那么所有的主键或索引都必须包含进来
  • 分区表无法使用外键约束(通过外键约束一次性更新多张表)

3、分区的原理

分区表由多张底层表实现,这些底层表也是由句柄对象表示。存储引擎管理分区的各个底层表和管理普通表一样,分区表索引只是在各个底层表上各自加上一个完全相同的索引。

对分区表进行CURD操作,存储引擎会打开分区表并锁住全部底层表,但并不是锁住全表。主要是看存储引擎的类型,如INNODB是实现行级锁,会在分区层释放表锁。

4、分区的类型

  • 最多是按范围分区,每个分区存储在某个范围的数据。分区表达式可以是列,也可以是列的表达式。
  • 还支持键值、哈希和列表分区

5、分区使用的策略

  • 全量扫描数据,不做任何索引
  • 索引数据,并分离热点数据

6、分区的局限

对于分区的使用策略,有两个非常重要的假设:查询能够过滤掉很多额外的分区,分区本身并不会带来很多额外的开销。

  • NULL值会使分区过滤无效(都会默认存放在第一分区)
  • 分区列和索引列不匹配(无法进行分区过滤)
  • 选择分区的成本可能很高(分区数越大,成本越高)
  • 打开并锁住所有底层表的成本可能很高
  • 维护分区的成本可能很高(重组分区的成本很高)

总结:

1、分区数不能太多(100个内)

2、尽量让数据均匀落在各个分区内

3、最好不要跨区查询数据

4、查询sql最好包含分区列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值