一、分区原理
分区并不是生成新的数据表,而是将表的数据均衡分摊到不同的硬盘,系统或是不同服务器存储介子中,实际上还是一张表。要实现这一功能,首先要了解数据库对水平分区表进行分区存储的原理。
数据库分区和分表相似,都是按照规则分解表。不同在于分表将大表分解若干个独立的实体表,而分区是将数据分段划分在多个位置存放,分区后,表还是一张表,但数据散列到多个位置了。应用程序读写的时候操作还是表名,DB自动去组织分区的数据。
所谓水平分区分表,就是把逻辑上的一个表,在物理上按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在不同的磁盘下。这样把一个大的文件拆分成多个小文件,便于我们对数据的管理。
二、分区表
其实表在创建的时候就已经决定是否是分区表了。虽然在很多情况下都是你在发现已经表已经足够大的时候才想到要把表分区,但是分区表只能够在创建的时候指定为分区表。
1、垂直分区分表
垂直分区分表是在SQL Server 2005之前大量使用的,垂直分表相对很少见到和用到,因为这可能是数据库设计上的问题了。
如果数据库中一张表有部分字段几乎从不更改但经常查询,而部分字段的数据频繁更改,这种设计放到同一个表中就不合理了,相互影响太大了。存在该情况的表,可以考虑按列拆分表,即垂直拆分。拆分完成后,通过分表之间设置外键关联,然后创建视图、存储过程对表进行读(查询)操作和触发器对表进行写(增、删、改)操作。
2、水平分区分表
水平分区分表是SQL Server2005之后被大量使用的。其原理就是将逻辑上的一个表,在物理上拆分,将数据存储在不同的文件组中。
这里讲的分区,此“区”非彼“区”,这里讲的分区的意思是指将同一表中不同行的记录分配到不同的物理文件中,几个分区就有几个.idb文件。
每个区都是独立的,可以独立处理,也可以作为一个更大对象的一部分进行处理。这个是数据库支持的功能,业务代码无需改动。
3、水平分区分表优点
(1)便于存档
(2)便于管理:备份恢复时可以单一的备份或者恢复某一个分区
(3)提高可用性:一个分区故障,不影响其他分区的正常使用
(4)提高性能:提升查询数据的速度
三、数据库分区应用
数据库应用一般分为2类,一类是OLTP(在线事务处理),一类是OLAP(在线分析处理)。
1、对于OLAP应用分区的确可以很好的提高查询性能,因为一般分析都需要返回大量的数据,如果按时间分区,比如一个月用户行为等数据,则只需扫描响应的分区即可。
2、在OLTP应用中,分区更加要小心,通常不会获取一张大表的10%的数据,大部分是通过索引返回几条数据即可。
四、数据库分区的优势
分区可以做到将表的数据均衡到不同的地方,提高数据检索的效率,降低数据库的频繁IO压力值,目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。
1、相对于单个文件系统或是硬盘,分区可以存储更多的数据;
2、数据管理比较方便,比如要清理或废弃某年的数据,就可以直接删除该日期的分区数据即可;
3、精准定位分区查询数据,不需要全表扫描查询,大大提高数据检索效率;
4、可跨多个分区磁盘查询,来提高查询的吞吐量;
5、在涉及聚合函数查询时,可以很容易进行数据的合并;
到此,数据库分区就介绍完了,希望对大家能有所帮助。一项技术,不是用了就一定能带来益处。分区也是一样,不是启动了分区数据库就会运行的更快,分区可能会给某些sql语句性能上的提高,但是分区主要用于数据库高可用性的管理。对于分区的使用个人建议和提醒:如果不清楚如何使用分区可能会对性能产生负面的影响,慎用。