MSSQL视图使用详解

本文详细介绍了SQL Server视图的用途、类型、使用场景和创建方法,包括限制数据访问、简化查询、提供向后兼容性等。视图分为标准视图、索引视图和分区视图,其中索引视图能提升查询性能。创建视图时需注意各种限制条件,如不能使用ORDER BY、INTO语句等。此外,文章还提供了创建和使用视图的示例。
摘要由CSDN通过智能技术生成

视图是为用户对数据多种显示需求而创建的,其主要用在一下几种情况:
 (1)限制用户只能访问特定表特定条件的内容,提高系统的安全性。
 (2)隐藏表结构、创建多种形式的数透视,满足不同用户需求。
 (3)将复杂的SELECT语句和表JION形成一个视图,给用户提供一个良好的接口。
 (4)为使用频率较高的联表聚合运算创建索引视图,以提升程序的性能。
 (5)创建分区视图调用远程数据,实现数据的分布式存储与查询,提升程序的吞吐能力。

一了解视图
         视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图在数据库中并不是以数据值存储集形式存在,除非是索引视图。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
 对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其他数据库的一个或多个表,或者其他视图。分布式查询也可用于定义使用多个异类源数据的视图。例如,如果有多台不同的服务器分别存储您的单位在不同地区的数据,而您需要将这些服务器上结构相似的数据组合起来,这种方式就很有用。

二、视图类型
 在 SQL Server 2005 中,您可以创建标准视图、索引视图和分区视图。
 标准视图
        标准视图组合了一个或多个表中的数据,您可以获得使用视图的大多数好处,包括将重点放在特定数据上及简化数据操作。
 索引视图      
       索引视图是被具体化了的视图,即它已经过计算并存储。可以为视图创建索引,即对视图创建一个唯一的聚集索引。索引视图可以显著提高某些类型查询的性能。索引视图尤其适于聚合许多行的查询。但它们不太适于经常更新的基本数据集。
 分区视图
        分区视图在一台或多台服务器间水平连接一组成员表中的分区数据。这样,数据看上去如同来自于一个表。联接同一个 SQL Server 实例中的成员表的视图是一个本地分区视图。

三、使用视图的情况
       视图通常用来集中、简化和自定义每个用户对数据库的不同认识。视图可用作安全机制,方法是允许用户通过视图访问数据,而不授予用户直接访问视图基础表的权限。视图可用于提供向后兼容接口来模拟曾经存在但其架构已更改的表。还可以在向 Microsoft SQL Server 2005 复制数据和从其中复制数据时使用视图,以便提高性能并对数据进行分区。
着重于特定数据视图使用户能够着重于他们所感兴趣的特定数据和所负责的特定任务。不必要的数据或敏感数据可以不出现在视图中。例如, AdventureWorks 示例数据库中的视图 vBikes 允许用户查看当前库存的所有自行车的名称。该视图将从 Product 表中筛选掉除 Name 之外的所有字段,并仅返回自行车成品的名称,而不是自行车配件的名称。

 简化数据操作
        视图可以简化用户处理数据的方式。可以将常用联接、投影、UNION 查询和 SELECT 查询定义为视图,以便使用户不必在每次对该数据执行附加操作时指定所有条件和条件限定。例如,可以将一个用于报表目的且执行子查询、外联接和聚合来从一组表中检索数据的复杂查询创建为视图。视图简化了对数据的访问,因为每次生成报表时无需编写或提交基础查询,而是查询视图。有关对数据进行操作的详细信息,请参阅查询基础知识。
 尽管不是复杂查询, AdventureWorks 示例数据库中的视图 vBikes 仍允许用户着重于特定数据,而不必构造生成视图所需的 JOIN 子句。
 还可以创建用户定义的内联函数,在逻辑上作为参数化视图运行,或者作为在 WHERE 子句搜索条件或查询的其他部分中含有参数的视图运行。
 提供向后兼容性
     视图使您能够在表的架构更改时为表创建向后兼容接口。例如,一个应用程序可能引用了具有以下架构的非规范化表:
 Employee(Name, BirthDate, Salary, Department, BuildingName)
 若要避免在数据库中重复存储数据,可以通过将该表拆分为下列两个表来规范化该表:
 Employee2(Name, BirthDate, Salary, DeptId)
 Department(DeptId, BuildingName)
 若要提供仍然可引用 Employee 中数据的向后兼容接口,可以删除旧的 Employee 表并以以下视图中的内容替换它:
 自定义数据
        视图允许用户以不同方式查看数据,即使在他们同时使用相同的数据时也是如此。这在具有许多不同目的和技术水平的用户共用同一数据库时尤其有用。例如,可创建一个视图以仅检索由客户经理处理的客户数据。该视图可以根据使用它的客户经理的登录 ID 决定检索哪些数据
 导出和导入数据
        可使用视图将数据导出到其他应用程序。例如,您可能希望使用 AdventureWorks 数据库中的 Customer 和 SalesOrderHeader 表在 Microsoft Excel 中分析销售数据。为此,可基于 Customer 和 SalesOrderHeader 表创建视图。然后可以使用 bcp 实用工具导出视图定义的数据。如果使用 INSERT 语句可以在某些视图中插入行,那么使用 bcp 实用工具或 BULK INSERT 语句也可将数据文件中的数据导入视图。
 跨服务器组合分区数据
        Transact-SQL UNION 集合运算符可在视图内使用,将单独表的两个或多个查询的结果组合到单一的结果集中。这在用户看来是一个单独的表,称为分区视图。例如,如果一个表包含华盛顿的销售数据,另一个表包含加利福尼亚的销售数据,则可以对这两个表使用 UNION 创建一个视图。该视图代表这两个地区的销售数据

四、视图解析
 SQL Server 2005 查询处理器对索引视图和非索引视图将区别对待:
 索引视图的行以表的格式存储在数据库中[只有创建了索引才分配存储空间]。如果查询优化器决定使用查询计划的索引视图,则索引视图将按照基表的处理方式进行处理。
 只有非索引视图的定义才存储,而不存储视图的行。查询优化器将视图定义中的逻辑纳入执行计划,而该执行计划是它为引用非索引视图的 SQL 语句生成的。
 SQL Server 查询优化器用于决定何时使用索引视图的逻辑与用于决定何时对表使用索引的逻辑相似。如果索引视图中的数据包括所有或部分 SQL 语句,而且查询优化器确定视图的某个索引是低成本的访问路径,则不论查询中是否引用了该视图的名称,查询优化器都将选择此索引。
 当 SQL 语句引用非索引视图时,分析器和查询优化器将分析 SQL 语句的源和视图的源,然后将它们解析为单个执行计划。没有单独用于 SQL 语句或视图的计划。
 与所有索引相同,仅当查询优化器确定在 SQL Server 的查询计划中使用索引视图有益时,SQL Server 才会选择使用视图索引。当满足下列条件时,SQL Server 查询优化器使用索引视图:
    当满足下列条件时,SQL Server 查询优化器使用索引视图:
  下列会话选项均设置为 ON:
  ANSI_NULLS
  ANSI_PADDING
  ANSI_WARNINGS
  ARITHABORT
  CONCAT_NULL_YIELDS_NULL
  QUOTED_IDENTIFIER
  NUMERIC_ROUNDABORT 会话选项设置为 OFF。
  查询优化器查找视图索引列与查询中的元素之间的匹配,例如:
  WHERE 子句中的搜索条件谓词
  联接操作
  聚合函数
  GROUP BY 子句
  表引用
  估计的索引使用成本是查询优化器考虑使用的所有访问机制中的最低成本。
  查询中引用(直接或通过展开视图访问其基础表)的且与索引视图中的表引用相对应的每个表在该查询中都必须具有应用于表的相同提示集
 我们不必SELECT的子句中显式引用索引视图,查询优化器即可使用该索引视图。
五、设计和实现视图
         1、创建标准视图
 

SET  ANSI_NULLS  ON
 
GO
 
SET  QUOTED_IDENTIFIER  ON
 
GO
 
CREATE   VIEW   [ dbo ] . [ Product_Nam
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值