数据库:使用视图优化查询性能

视图是从一个或多个表中导出来的虚拟表。这是因为视图返回的结果集的一般格式与由列和行组成的表相似,并且在SQL语句中引用视图的方式也与引用表的方式相同。

视图概述

视图是从一个或者几个基本表或者视图中导出的虚拟表,是从现有基表中抽取若干子集组成用户的“专用表”,这种构造方式必须使用SQL中的SELECT语句来实现。在定义一个视图时,只是把其定义存放在数据库中,并不直接存储视图对应的数据,直到用户使用视图时,才查找对应的数据。

使用视图具有如下优点:

  • 简化对数据的操作。视图可以简化用户操作数据的方式。可将经常使用的连接、投影、联合查询和选择查询定义为视图,这样在每次执行相同的查询时,不必重写这些复制的语句,只要一条简单的查询视图语句即可。视图可向用户隐藏表与表之间复制的连接操作。

  • 自定义数据。视图能够让不同用户以不同方式看到不同或相同的数据集,即使不同水平的用户共用同一数据库时也是如此。

  • 数据集中显示。视图可以使用户着重于其感兴趣的某些特定数据或所负责的特定任务,提高数据操作效率,同时增强数据的安全性,因为用户只能看到视图中定义的数据,而不是基本表中的数据。

  • 导入和导出数据。可以使用视图将数据导入或导出。

  • 合并分割数据。在某些情况下,由于表中数据量太大,在表的设计过程中可能需要经常对表进行水平分割或垂直分割,这样表结构的变化会对应用程序产生不良的影响。使用视图可以重新保持原有的结构关系,使外模式保持不变,原有的应用程序仍可以通过视图来重载数据。

  • 安全机制。视图可以作为一种安全机制。通过视图,用户只能查看和修改他们能看到的数据。其他数据库或表既不可见,也不可访问。

创建视图
# 创建视图
CREATE VIEW view_name [(Column [,...])] AS select_statement [WITH CHECK OPTION];

其中参数的含义如下:

  • view_name:定义视图名,其命名规则与标识符的相同,并且要保证在一个数据库中是唯一的,该参数不能省略。

  • Column:声明视图中使用的列名

  • AS:说明视图要完成的操作

  • select_statement:定义视图的SELECT命令。视图中的SELECT命令不能包括ORDER BY等子句。

  • WITH CHECK OPTION:强制所有通过视图修改的数据必须满足select_statement语句中指定的选择条件。

视图的使用

视图的使用主要包括视图的检索,以及通过视图对基本表进行插入、修改、删除操作。视图的检索几乎没有什么限制,但是对通过视图实现表的插入、修改、删除操作则有一定的限制条件。

  • 使用视图检索数据:视图的查询总是转换为对它所依赖的基本表的等价查询

  • 通过视图修改数据:视图也可以使用INSERT语句插入行,当执行INSERT语句时,实际上是向视图所引用的基本表插入行。在视图中使用INSERT语句与在基本表中使用INSERT语句的格式完全一样。

如果视图中有下面所述属性,则插入、更新或删除操作将失败:

  • 视图定义中的FROM子句包含两个或多个表,且SELECT选择列表达式中的列包含来自多个表的列。

  • 视图的列是从集合函数派生的

  • 视图中的SELECT语句包含GROUP BY子句或DISTINCT选项

  • 视图的列是从常量或表达式派生的

视图的修改
# 修改视图
ALTER VIEW view_name [(Column[,...])] AS select_statement [WITH CHECK OPTION];

如果在创建视图时使用了WITH CHECK OPTION选项,则在使用ALTER VIEW命令时,也必须包括这些选项。

视图的删除
DROP VIEW {view_name} [,...];

提示:

  • 删除视图时,将从系统目录中删除视图的定义和有关视图的其他信息,还将删除视图的所有权限。

  • 使用DROP TABLE删除的表上的任何视图都必须用DROP VIEW命令删除。

(最近更新:2019年09月03日)

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值