分区:是将一个表或索引物理的分解为多个更小、更可管理的部分。
分区的好处
1.提高数据的可用性
2.减轻管理负担
由于从数据库中将大段分解成了若干小段
3.改善某些查询的性能
在大型仓库环境中,通过使用分区可以消除很大的数据区间,从而不必考虑他们,相应的根本不用访问这些数据;但在 事务性系统中并不适用,因为这种系统本身就只是访问少量的数据;
4.减少大容量OLTP系统上的竞争
可以把修改分布到多个单独的分区上即:如果一个大段遭遇激烈的竞争,可以把它分为多个小段,从而成比例的减少竞争。
表分区机制
1.区间分区
Oracle中 最常用的分区机制
可以指定应当存储在一起的数据区间;
例如:
2016年10月所有数据存储在分区1中,2016年11月所有数据存储在分区2中;
2.散列分区
指在一个列或多个列上应用一个散列函数,数据记录会按照这个散列值存放在相应的分区中。
3.列表分区
制定一个离散值集,来确定应当存储在一起的数据。
例如:
可以指定status列值在(‘A’,‘M’,‘Z’)中的行放在分区1中,status列值在(‘C’,‘D’,‘F’)中的行放在分区2中
4.间隔分区
与区间分区相似,区别在于数据库本身可以再数据到来时创建新的分区。
区间分区:DBA必须在创建分区时包含(现在及未来)所有可能的值,或DBA需定期创建分区
间隔分区:当无法放入根据DBA制定的规则建立的现有分区,数据库本身就会创建新的分区
引用分区
允许由外键强制的父子关系中的子表继承父表的分区机制。
这样就能够建立子表与其附表的对等分区,而不必对数据模型进行反规范化。
</div></blockquote></div><h3>
6.组合分区</h3><div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><div>
为区间分区与散列分区的一种组合,或是 区间分区与列表分区的组合。</div></blockquote></div><div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><div>通过组合分区,可以先对某些数据应用分区机制,再利用某种分区机制将分区分到子区间。</div><div></div></blockquote></div><h2>
行移动</h2><div>
alter table range_example enable row movement;
--Oracle8.0中没有这样的功能,必须先删除行,再重新插入。
1.如果修改确定分区的列会发生什么后果?
- 修改不会导致使用一个不同的分区,行仍属于原来的分区。
- 修改会导致行跨分区移动。只有当表启用了行移动才支持这种情况;否则,会产生一个错误。
2.行移动机制
执行行移动时,实际上在内部就好像先删除了这一行,然后再将其重新插入。
这会更新这个表上的索引,删除旧的索引条目,再插入一个新条目。
此时会完成delete再加一个insert的相应物理工作,但在oracle看来却还是一个更新。因此不会导致insert和delete触发器出发,只有update触发器会触发。
另外,由于外键约束可能不允许,所以delete子表也不会出发delete触发器。
由于行移动的开销比正常update昂贵的多,所以,系统构建应避免 频繁修改分区键,尤其是修改会导致分区移动。
索引分区
■ 随表对索引完成相应的分区:
也称为“局部索引”(locally index)。每个表分区都有一个索引分区,而且只索引该表分区。一个给定索引分区中的所有条目都指向一个表分区,表分区
中的所有行都表示在一个索引分区中。
■ 按区间或散列对索引分区:
也称为“全局分区索引”(globally partitioned index)。
索引按区间分区(或在10g及更高版本中还可以按散列分区),一个索引分区可能指向任何(和所有)表分区。
由于全局索引只按照区间分区、散列分区,若希望使用列表分区或组合分区,则必须使用局部索引。
局部索引会使用与底层表相同的机制分区。
1.局部索引与全局索引
疑问:
1.什么是OLTP?
基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用户操作快速响应的方式之一。
2.什么是仓库系统 ?
3.OLTP与OLAP?On-Line Analytical Processing 联机分析处理(OLAP)
当今的数据处理大致可以分成两大类:
- OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。
- OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。