跳到主要内容

视图和索引

虚拟视图

虚拟视图

  • 不以物理形式实际存在;
  • 通过已有关系定义;
  • 随关系变化实时动态更新;

定义视图

  • CREATE VIEW <视图名> AS <视图定义>
  • <视图定义>为 SQL 查询;
CREATE VIEW Paramount Movies AS
SELECT title,year
FROM Movies
WHERE studioName= Paramount";

视图查询

  • 等同于表;

视图重命名

CREATE VIEW Paramount(movieTitle, prodYear) Movies AS
SELECT title,year
FROM Movies
WHERE studioName= Paramount";

视图更新表

更新机制
  • 大多视图无法进行更新操作;
  • 可进行更新操作的视图叫做可更新视图;
  • 将对视图的更新转换为对表的更新;
  • 关系的更新总会影响对应视图;
删除视图
  • 不可更新视图的删除不会影响对应表的删除;
DROP VIEW ParamountMovies;
可更新视图
  • 视图对应单个关系 R;
    • SELECT 不可使用 DISTINCT;
    • FROM 只能有一个关系 R;
    • WHERE 中的子查询不可以使用 R;
  • 视图属性包括足够多的属性;
  • 更新操作同表;

物理视图

物理视图

  • 将经常使用的虚拟视图进行物理存储;

定义物理视图

CREATE MATERIALIZED VIEW MoViePrOd AS
SELECT title,year,name
FROM Movies,MovieExec
WHERE producerC#=cert#;

更新物理视图

  • 物理视图可进行任何更新操作;
  • 物理视图的更新操作会作用于对应表;
  • 关系的更新总会影响对应视图;
  • 更新操作同表;

索引

索引

  • 定义于属性(组) A;
  • 一种数据结构;
  • 加快 A 的查询效率;

声明索引

-- 单一属性
CREATE INDEX YearIndex ON Movies(year);
-- 多属性
CREATE INDEX KeyIndex ON Movies(title,year);

删除索引

DROP INDEX YearIndex;

索引选择

  • B 树;