后端开发人员对数据库分区技术的了解

                                         数据库分区

简要说明本技术是什么,有什么用,分类及优势;可以让你快速对此技术有个简而精的了解


 

  • 一句话概括

数据库表分区是一种物理数据库设计技术;

就是将一个数据量比较大的表,用某种方法把数据从物理上分成若干个小表来存储,从逻辑来看还是一个大表;

主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。

 

  • 分类

分区主要有两种形式:水平分区(row行),垂直分区column列)

水平分区(Horizontal Partitioning)

对表的行进行分区,表中一行数据是一个完整的个体,一行或多行数据组成一个分区;

例:一个包含一年记录的订单表可以从时间上分为12个分区,每个分区包含一个月的记录。(通过某个表字段列来分割)

垂直分区(Vertical Partitioning)

通过对表的垂直(列)划分来减少目标表的宽度,使某些特定的列被划分到特定的分区;

表中每一列是一个完整的个体,一个或多个列组成一个分区。

例:一个包含了 clob(大文本)字段类型表,而且这个列又不经常被访问,这时候可以划分到另一个分区,在保证它们数据相关性的同时还能提高访问速度。

                下面主要讲的是水平分区,也是常采用的分区方式


  • 优势

举例说明:有张user表中现在有5000w条数据,主键id和crt_time建了索引,根据创建时间分成100个分区,(假设根据时间均匀分布)每个分区约50W数据

 insertupdatedeleteselect
操作新增一条数据,带id和crt_time更新一条数据By id删除一条数据 By id查询  带crt_time
分区前更新全表crt_time索引5000w根据主键id查询5000,命中后更新根据主键id查询5000,命中后删除,更新全表id索引,全表crt_time索引对5000w数据条件查询
分区后根据crt_time命中分区,更新分区crt_time索引50W根据主键id查询5000,命中后更新根据主键id查询5000,命中后删除,更新全表id索引,分区crt_time索引根据crt_time命中分区,对分区的50W条数据条件查询
提升crt_time索引更新总数,由5000w减少到50Wcrt_time索引更新总数,由5000w减少到50W扫描数据由5000W收敛到50W

索引维护呈数量级的下降,提高查询效率

——sql语句一定要带分区字段,这样数据库可以根据分区字段把sql快速收敛到目标分区,如果不携带分区字段相当于全表扫描

——默认情况下,oracle的分区表对于分区字段是不允许进行update操作的,如果有对分区字段行进update,就会报错(参照参考文章)

1、性能的提升(Increased performance)

1)改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。

2)降低索引的维护压力,更新或新增一条数据只需维护其所在分区的索引,其他分区不做改变;

3) 均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能;如果把这些分区建立在不同的磁盘上,还可以同时对多个分区同时IO提高效率(单线程变多线程)。

还有诸如写操作的锁操(如果不更新全局索引字段如主键ID,则锁的是分区表,对其他分区无影响)作等,都会带来很多显然的好处

2、对数据管理的简化

1) 增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;

2) 维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可(分区表可以单独建立维护索引);

优势总结

对于一名非DBA的程序员来说,表分区提高了数据操作的效率,但是SQL必须带上分区字段(如创建时间),且分区字段值一般不可修改

参考文章

理论

https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E5%88%86%E5%8C%BA/3801074?fr=aladdin

mysql表分区

https://blog.csdn.net/zhanglong_longlong/article/details/52670141

Oracle数据库分区分表以及读写分离

https://www.cnblogs.com/adolfmc/p/5381737.html

ORA-14402: 更新分区关键字列将导致分区的更改

https://www.cnblogs.com/SZ2015/p/4667976.html

数据库分区、分表、分库、分片

https://blog.csdn.net/qq_28289405/article/details/80576614

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值