设为首页 加入收藏

TOP

11GConcept第四章翻译Partitions,Views,andOtherSchemaObjects(分区,视图,以及其他SchemaObjects)(三)
2014-11-24 08:16:37 来源: 作者: 【 】 浏览:3
Tags:11GConcept 第四章 翻译 Partitions Views andOtherSchemaObjects (分区 视图 及其他 SchemaObjects
时,则索引分区消除总是会发生.而使用非前置索引时,则可能不会(基本上不会).

Local Partitioned IndexStorage(本地分区索引的存储)

和表分区一样,本地索引分区存到自己独有的segment中,每个segment包含整个索引数据的一部分,一个本地索引,有四个索引分区,是分别存放在四个独立的segment中。

Global Partitioned Indexes(全局分区索引)

全局分区索引是一个独立于底层表的分区索引。一个索引分区可以指向任何一个,多个,甚至全部的表分区。而在本地分区索引中,索引分区和表分区是一一对应的。

正常情况,全局分区索引适用于OLTP应用(重点需要快速访问,数据完整,以及可用性)。

在一个OLTP系统中,一个表可能只根据一个key进行分区,举个例子,像employees.department_id列。但是应用可能需要通过不同的keys进行数据访问,举个例子,像通过employee_id或者job_id。全局分区索引适用于这种情况。

你可以讲一个全局索引根据range或者hash进行分区。如果根据range分区,那么数据库将全局索引根据你指定的 列 的相应区间值 进行分区。如果根据hash进行分区,则数据库根据指定 行中列值根据hash函数hash出来的值,存储到相应分区。

举个例子:假设你创建了一个global 分区索引 在time_range_sales(上面根据年份创建的那个例子)表。在这种情况下,1998年的销售记录都存在一个分区,而1999年

的销售记录在另外一个分区,以此类推。

下面创建了一个根据channel_id列的全局分区索引。

CREATE INDEX time_channel_sales_idx ONtime_range_sales(channel_id)

GLOBAL PARTITION BY RANGE(channel_id)

(PARTITION p1 VALUES LESS THAN(3),

PARTITIONP2 VALUES LESS THAN(4),

PARTITIONP3 VALUES LESS THAN(MAXVALUE));

如下图显示,一个全局索引分区可以包含指向多个表分区的条目。索引分区p1指向行是channel_id等于2的。索引分区p2指向的行是channel_id等于3的,以及索引分区p3指向的行是channel_id从4到9的。

\

可以通过查询*_part_indexes来确认索引是local分区还是global分区。

Partitioned Index-OrganizedTables(IOT分区)

IOT表,可以进行range,list,HASH分区。

分区提供了更高的可管理型,可用性和性能

另外,使用IOT的数据墨盒也可以利用这个功能来分区存储它的数据。

在IOT中使用分区需注意:

·分区列必须是主键列,或者主键列的一部分。

·可以在上面创建另外的索引(全局,本地)

·OVERFLOW数据库段的数量 永远和表分区的数量相等。

Oracle数据库支持bitmap索引创建在分区或者不分区的IOT上。在IOT表创建bitmap后,mapping表会自动创建。

Overview of Views(视图概述)

一个view(视图)是一个表或者多个表逻辑的呈现。实际上,view就是一个存储好的查询语句.一个视图基于一些表创建,而这些表叫做base tables(基表,听起来很基吧)

基表可以是表,也可以是其他的视图.

所有对于视图的操作,实际上是对下面的基表进行处理.

在可以用表的地方,视图都可以用.

提示:Materialized views(物化视图)和普通的视图完全不一样,后面会说到.

视图可以使你针对不同的用户,显示相同数据的不同部分.视图经常被用来:

·通过限制表中特定行,或者特定列的显示,来增加安全性

随后的图 会显示staff视图不显示基表employees的salary或commission_pct列.

·隐藏数据的复杂性

举个例子,一个视图可以是一个join语句,这个语句多个表中相关字段,行的组合.

视图隐藏了实际情况,一大串语句使用一个视图名就代替了.

一个查询同样可能根据表的信息进行大量的计算.

用户可以通过查询一个视图来获取这些信息,而不需要去知道这些join或计算本身如何操作的.

·通过不同的视角看基表的数据

举个例子:在视图中,可以对基表的列进行改名,而不会影响到基表(列别名)

·隔绝基表的定义变化

举个例子:一个视图是查询基表中三个列(基表本身有四列),现在基表增加了一个列,变成了五列。这时视图的定义是不会发生任何改变的。而使用视图的应用也不会有任何影响。

举个使用视图的例子。hr.employees表,它有一些列,还有很多行。为了使用户只能 这些列中的5列。这时 你可以创建一个视图:

CREATE VIEW staff AS

SELECT employee_id,last_name,job_id,manager_id,department_id

FROMemployees;

和所有的子查询一样,视图中的查询语句不能包含 FOR UPDATE子句。

下图描述了staff视图,注意这个视图只显示了基表中的五个列。

\

Characteristics of Views(视图的特征)

和表不一样,一个视图是不需要分配存储空间的(没segment),视图本身是没数据的。

视图是定义在数据字典中的一个语句。

视图和它引用的对象 之间 存在 依赖关系,这个依赖关系由数据库自己处理

举个例子,如果你删除以及重新创建了视图相关的一个基表,则数据库会判断这个新的基表对于视图的定义来说 是否可以接受。

Data Manipulation in Views(对于视图的数据操作)

视图和表有很多相似的地方。举个栗子。一个视图可以有最多1000列,和表一样。

用户可以查询视图。在一些限制下,用户也可以对视图进行DML操作。

对视图进行操作,其实影响的数据是视图基表的,受限于基表的完整性约束,以及会触发基表的触发器。

下面创建了一个视图:

CREATE VIEW staff_dept_10 AS

SELECT employee_id,last_name,job_id,

manager_id,department_id

FROM employees

WHERE department_id=10

WITH CHECK OPTION CONSTRANTstaff_dept_10_cnst;

这个查询只应用了department=10的行,CHECK OPTION子句建了一个约束,保证对视图执行INSERT ,UPDATE后的结果,一定要可以从视图中SELECT,否则则该DML不允许执行。

因此,department_id列值是10的行,可以插入这个视图,但是30是的行是不允许插入的。

How Data Is Accessed inViews(视图中数据是如何访问的)

Oracle数据库在数据字典中存储视图的定义(查询语句),当你在sql中使用了视图,Oracle数据库会执行下面的操作:

1、对查询这个视图的语句,进行合并查询,将查询 视图,变成查询视图各个基表。

Oracle 合并查询,就是你这个查询虽然使用了视图,但是好像你

首页 上一页 1 2 3 4 5 6 下一页 尾页 3/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇linux操作系统下完全删除oracle数.. 下一篇Oracle分析表简介

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)
·使用华为开发者空间 (2025-12-27 04:19:24)
·Getting Started wit (2025-12-27 03:49:24)
·Ubuntu 上最好用的中 (2025-12-27 03:49:20)