物化视图,所谓视图实际上是不存储物理信息的(同表相区别,表存储实际的数据和表的索引信息等。),视图仅仅存储 一个select语句而已。而物化视图就要视图也存储实际的数据,这种实际数据,就是索引。oracle 8imssqlserver2000中引入的。比如oracle的函数索引和sqlserver2000的索引视图都是物化视图。原因是这种视图能够显著提高性能,举个例子
一个表:
create table mytable (id int not null,name varchar(20) not null)
create index idx_mytable on mytable.name
当我们查询的时候,
select * from mytable where name like 'j%',
优化器能够使用索引来提高性能,然而我们遇到这种情况就不能使用索引了,如:
select * from mytable where name like '%bing%'
或者
select * from mytable where substring(name,1,5)='jiang'
这样的情况不能使用索引
但引入物化视图就不同了
create view myview(vid,vname) as select id,substring(name,1,5) from myview.
然后再vname上建立索引即可显著提高查询性能。
oracle的函数索引亦是如此。
create index idx_mytable on mytable(upper(name))
--
就是这样的
http://book.51cto.com/art/200710/57893.htm
1.6.2 物化视图
SQL Server 2005增强了索引化视图,也叫做物化视图。现在你可以使用一个能索引化的视图扩展集合了。在SQL Server中还有一些可以被索引化的视图类型,如使用下列选项的视图:
外部连接(Outer Joins)。
级联集合(Scalar Aggregates)。
ROLLUP和CUBE。
当数据库管理员或者开发者在视图上创建索引时,这个视图就被物化(执行)了,并且结果集被永久地保存在唯一聚簇索引(Clustered Index)中,保存方式与一个有聚簇索引的表的保存方式相同。可以在第一级唯一聚簇索引创建之后添加非聚簇的第二级索引。
索引视图有以下两个优点。
减除了为引用视图的查询动态建立结果集的管理开销。
优化人员可以在查询中使用视图索引,而不需要在FROM子句中直接指定视图。
引用索引化视图中的相关列的现有查询可以受益于提高了的在索引化视图中获取数据的效率,而且不需要重新编写代码。关于它们更多的介绍,请见第3章。代码举例,请见第6章“代码章节”。