Oracle中分区、视图、以及其他SchemaObjects
欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 虽然表和索引是最重要、最常用的schema Objects,但是数据库还是很多其他schema objects。其中最常用的都在本章介绍。 本章包含下面几小节: ?Overview of Partitions(分区的概述) ?Overview of Vie
欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入
虽然表和索引是最重要、最常用的schema Objects,但是数据库还是很多其他schema objects。其中最常用的都在本章介绍。
本章包含下面几小节:
?Overview of Partitions(分区的概述)
?Overview of Views(视图的概述)
?Overview of Materialized Views(物化视图的概述)
?Overview of Sequences(sequences的介绍,一般翻作序列,感觉怪怪的,这里不翻)
?Overview of Dimensions(纬度表的概述,数据仓库里的东西)
?Overview of Synonyms(同义词的概述)
Overview of Partitions(分区的概述)
分区使你可以将超大表、索引拆分成 很多小的,可管理性更高的片段,这些片段就叫分区。
每个分区都是一个独立的对象,有它自己的名字和存储属性
举个生活案例来解释分区
假设人力资源经理有一个超大的盒子,这个盒子里面放着雇员的文件夹,每个文件夹有的对应雇员的雇佣日期。
现在经常有需求,要查询指定月份 雇佣了哪些人。有一个办法是创建一个索引在 雇员的雇佣日期上,将在盒子中分散存放的文件夹的位置 按顺序记录在上面。
相比较而言,分区策略就是使用很多小盒子,每个盒子存放指定月份雇佣的人的记录。
用小盒子有几个好处,当有人要问 六月份时雇佣人的文件夹时,人力资源经理可以直接在六月份 这个盒子里面找。更进一步来说,如果有任何的小盒子临时性的损坏了,其他小盒子这个时候依然可以正常使用。移动办公室的时候也容易了,由移动一个超重大盒子,变成移动 很多小盒子。
从应用的角度来看,还是只有一个大表存在。表分区以后,相关语句不需要进行修改。
分区适用于多种数据库应用类型,特别是那些管理者大量数据的.
分区的优点包括:
?Increase availability(增加了可用性)
一个分区的不可用,不会导致整个对象的不可用。查询优化器会自动在执行计划中移除相关分区,所以某些分区损坏了,对查询是不会有影响的.
?Easier administration of schema objects(简化了对象的管理)
一个分区后的对象,既可以整体的来管理,也可以针对某个分区来管理。
DDL语句可以只对某个分区进行操作,因此你可以将一些资源密集型的任务 拆开执行。比如重建索引或者重建表。
举个例子:你可以直接对表分区进行move。如果出现了什么问题,那么也只有这个分区需要重新move 而不是整个表。同样的,删除一个分区可以避免执行大量的DELETE语句。
?Reduced contention for shared resources inOLTP systems(OLTP系统中减少共享资源的争用)
在一些OLTP系统中,分区可以减少共享资源的争用
举个例子:DML操作分散在了多个segment中,而不是在一个segment。
?Enhanced query performance in datawarehouses(增强数据仓库的查询性能)
在数据仓库中,分区可以加速处理一些特殊查询
比如:一个有N百万条的销售记录表 可以分成四个分区。
Partition characteristics(分区有哪些特征)
表和索引的每个分区,必须拥有一样的 逻辑属性(attributes),比如列名,数据类型,约束等。
举个例子:一个表中的所有分区都公用同一种列、约束的定义,而索引的所有分区都公用相同的索引列。然而,每个分区都有自己独自的物理属性,比如 属于哪个表空间等。
Partitioning Key(分区key)
分区key 是一个或者多个列。用来决定分区表中的每一行应该去哪一个分区。
每一行只能属于 一个分区。
在sales表,你可以指定time_id列是range partition的key。数据库分配表中的行到哪个分区,这完全基于这行的time_id值是不是属于这个分区范围的。
Oracle数据库自动根据条件中的分区key来 直接对合适的分区进行DML。
Partitions Strategies(分区方案)
Oracle 提供了一些分区方案,用来决定数据该怎样进行分区。
基础的方案就是 range,list,hash分区.
Single-level(单级)分区策略,只使用这些数据分布方法的其中之一.
举例说明:要么只用range分区,要么只用list分区.
在Composite partitioning(组合分区)中,每个分区根据一种方法进行分区,然后每个分区又进一步分出子分区.
举例说明:你可以使用channel_id列进行list分区。然后再使用time_id进行range子分区
Range Partitioning(范围分区)
在范围分区中,数据库根据分区key 指定的范围 来决定行的归属。
范围分区最常用到date类型上。
[1] [2] [3] [4]