oracle数据库笔记1

视图:

视图只是个虚拟表   反应一个或者多个基表的局部数据,本身是不存放数据的。其数据任然存放在基表中。

视图是基表的一个数据窗口,是实现数据的保密和数据安全性的一个手段

操作:查询  增加  删除

视图的效率问题:

1.要考虑效率,需要使用索引

估计的索引使用成本是优化器考虑使用的所有访问机制中的最低成本。

视图索引

对于涉及对大量的行进行复杂处理的非索引视图,为引用视图的每个查询动态生成结果集的开销会很大。
这类视图包括聚集大量数据或联接许多行的视图。若经常在查询中引用这类视图,可通过在视图上创建唯一聚集索引来提高性能

在视图上创建唯一聚集索引时将执行该视图,并且结果集在数据库中的存储方式与带聚集索引的表的存储方式相同

在视图上创建索引的另一个好处是:查询优化器开始在查询中使用视图索引,而不是直接在 FROM 子句中命令视图。
这样一来,可从索引视图检索数据而无需重新编码,由此带来的高效率也使现有查询获益。

在视图上创建聚集索引可存储创建索引时生成的结果集。


索引视图还自动反映自创建索引后对基表数据所做的更改,这一点与在基表上创建的索引相同。

当对基表中的数据进行更改时,索引视图中存储的数据也反映数据更改。

视图的聚集索引必须唯一,从而提高了 SQL Server 在索引中查找受任何数据更改影响的行的效率。

在视图上创建索引:

必须设置特定的 SET 选项后才能在视图上创建索引。

只有当执行语句的连接具有相同的选项设置时,查询优化器才考虑对后续 SQL 语句使用索引

在视图上创建的第一个索引必须是唯一聚集索引。

在创建唯一聚集索引后,可创建其它非聚集索引。

若除去视图,视图上的所有索引也将被除去。

若除去聚集索引,视图上的所有非聚集索引也将被除去。

可分别除去非聚集索引。

除去视图上的聚集索引将删除存储的结果集,并且优化器将重新 像 处理标准视图那样处理视图。

创建索引:CREATE UNIQUE INDEX INDEX_NAME ON TABLE(COLUMN_NAME)

创建聚集索引:CREATE UNIQUE CLUSTERED INDEX

尽管 CREATE UNIQUE CLUSTERED INDEX 语句仅指定组成聚集索引键的列,但视图的完整结果集将存储在数据库中。

与基表上的聚集索引一样,聚集索引的 B 树结构仅包含键列,但数据行包含视图结果集中的所有列。

指定为 PRIMARY KEY 或 UNIQUE 约束创建聚集或非聚集索引。PRIMARY KEY 约束默认为 CLUSTERED;UNIQUE 约束默认为 NONCLUSTERED。
如果表中已存在聚集约束或索引,那么在 ALTER TABLE 中就不能指定 CLUSTERED。如果表中已存在聚集约束或索引,PRIMARY KEY 约束默认为 NONCLUSTERED。

基于视图创建的索引和基于基表创建的索引:

与基表上的索引相比,对索引视图的维护可能更复杂

只有当提高的视图结果检索速度超过了修改所需的开销时,才应在视图上创建索引。

这样的视图通常包括映射在相对静态的数据上、处理多行以及由许多查询引用的视图

创建实例化视图:

create materialized view

原文地址:https://www.cnblogs.com/wust221/p/3058385.html