视图和索引

视图:

视图是从一个或者几个基本表(或视图)导出的表。与基本表不同的是它是一个虚表。真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在,数据库中只存放视图的定义。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。所以,基本表的数据发生变化,相应的视图的数据也会变化。

视图一经定义,就可以像基本表一样被查询,删除,但对视图的修改会有一定限制。


视图作用:

1、简单性---使用户关注于需要的数据上,通过视图可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件,用户只需对一个虚表进行简单查询即可,无需关心数据怎么来的。

2、安全性---对应不同用户定义不同视图,使保密数据不出现在不应该出现的用户面前(根据权限)。

3、逻辑性---图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。视图可以在以下几个方面使程序与数据独立:

  ①如果应用建立在数据库表上,当数据库表发生变化时,可以在表上建立视图,通过视图屏蔽表的变化,从而应用程序可以不动。

  ② 如果应用建立在数据库表上,当应用发生变化时,可以在表上建立视图,通过视图屏蔽应用的变化,从而使数据库表不动。

  ③如果应用建立在视图上,当数据库表发生变化时,可以在表上修改视图,通过视图屏蔽表的变化,从而应用程序可以不动。

  ④ 如果应用建立在视图上,当应用发生变化时,可以在表上修改视图,通过视图屏蔽应用的变化,从而数据库可以不动。

视图的各种使用:

CREATE VIEW <视图名>【(列名组)】AS <子查询>

DROP VIEW <视图名>
子查询可以是任意复杂的select语句,但通常不允许有order 不用子句和distinct短语。
with check opinion表示对视图进行update、insert、delete操作要保证更新、插入、删除满足视图定义中的谓语条件,就是子查询中的条件表达式。
使用WITH CHECK OPTION子句问题提出:若创建视图ygb_view,其程序清单如下:CREATE VIEW ygb_view AS SELECT * FROM 员工表 WHERE 员工表.性别=‘女’执行下列语句,插入新记录:INSERT INTO ygb_view(姓名,性别,工资)values(‘李立三’,‘男’,2300)插入操作成功,但不合理!解决办法:使用with check option,程序清单如下:CREATE VIEW ygb_view AS SELECT * FROM 员工表 WHERE 员工表.性别=‘女’With check option
 同样,插入新记录:INSERT INTO ygb_view(姓名,性别,工资) values(‘李立三’,‘男’,2300)插入操作将失败!

索引:
是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
例如这样一个查询:select * from table1 where id=10000。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),在索引中查找,但索引是经过某种算法优化过的,查找次数要少的多的多。可见,索引是用来定位的。
  索引分为聚簇索引和非聚簇索引两种,聚簇索引 是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。

索引作用:
建立索引的目的是加快对表中记录的查找或排序。 
第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
当然,也有缺点,
第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

索引的使用:
create index <indexname> on <tablename> (列名<次序>,列名<次序>...);
drop index <indexname> on <tablename>;

猜你喜欢

转载自634082093-qq-com.iteye.com/blog/1754718