大家谈谈视图对数据库性能的影响

wlwlwl 2005-03-24 03:56:50
欢迎讨论
...全文
1960 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shizi_mhy 2005-04-02
  • 打赏
  • 举报
回复
mark
real_name 2005-04-02
  • 打赏
  • 举报
回复
查询中无须再指定其它选项以使用索引视图。

查询不必在 FROM 子句中显式引用索引视图,查询优化器即可使用该索引视图。如果查询所引用的基表中的列也同时存在于索引视图中,并且,查询优化器估计使用索引视图将提供最低成本的访问机制,则查询优化器会选择索引视图,其方式类似于当查询中不直接引用基表索引时选择基表索引。当视图中包含非查询所引用的列时,只要视图提供覆盖一个或多个查询所指定列的最低成本选项,查询优化器即可能选择该视图。

使用 EXPAND VIEWS 选项可防止使用视图索引进行查询。可使用 NOEXPAND 视图提示强制优化器使用在 FROM 子句中指定的索引视图上的索引。不过,建议让查询优化器动态地决定各查询使用的最佳访问方法。只在经测试证实 EXPAND 和 NOEXPAND 可显著提高性能的特定情形中使用它们。

EXPAND VIEWS 选项指定对于整个查询,查询优化器不应使用任何视图索引。
zjcxc 元老 2005-04-02
  • 打赏
  • 举报
回复
视图使用方案
视图通常用来集中、简化和自定义每个用户对数据库的不同认识。视图可用作安全机制,方法是允许用户通过视图访问数据,而不授予用户直接访问视图基础表的权限。从(或向)Microsoft® SQL Server™ 2000 复制数据时也可使用视图来提高性能并分区数据。

着重于特定数据
视图让用户能够着重于他们所感兴趣的特定数据和所负责的特定任务。不必要的数据可以不出现在视图中。这同时增强了数据的安全性,因为用户只能看到视图中所定义的数据,而不是基础表中的数据。有关出于安全考虑使用视图的更多信息,请参见使用视图作为安全机制。

简化数据操作
视图可以简化用户操作数据的方式。可将经常使用的联接、投影、联合查询和选择查询定义为视图,这样,用户每次对特定的数据执行进一步操作时,不必指定所有条件和限定。例如,一个用于报表目的,并执行子查询、外联接及聚合以从一组表中检索数据的复合查询,就可以创建为一个视图。视图简化了对数据的访问,因为每次生成报表时无须写或提交基础查询,而是查询视图。有关数据操作的更多信息,请参见查询基础知识。

还可以创建内嵌的用户定义函数,在逻辑上作为参数化视图运行,或作为在 WHERE 子句搜索条件中含有参数的视图运行。有关更多信息,请参见内嵌用户定义函数。

自定义数据
视图允许用户以不同的方式查看数据,即使他们同时使用相同的数据时也如此。这在具有不同目的和技术水平的用户共享同一个数据库时尤为有利。例如,可定义一个视图以仅检索由客户经理处理的客户数据。视图可以根据使用该视图的客户经理的登录 ID 决定检索哪些数据。

导出和导入数据
可使用视图将数据导出至其它应用程序。例如,可能希望使用 pubs 数据库中的 stores 和 sales 表在 Microsoft® Excel 中分析销售数据。为此,可创建一个基于 stores 和 sales 表的视图。然后使用 bcp 实用工具导出由视图定义的数据。也可使用 bcp 实用工具或 BULK INSERT 语句将数据从数据文件中导入某些视图,条件是可以使用 INSERT 语句在视图中插入行。有关向视图中复制数据的限制的更多信息,请参见 INSERT。有关使用 bcp 实用工具和 BULK INSERT 语句从(或向)视图中复制数据的更多信息,请参见向(或从)视图中复制数据。

组合分区数据
Transact-SQL UNION 集合运算符可在视图内使用,以将来自不同表的两个或多个查询结果组合成单一的结果集。这在用户看来是一个单独的表,称为分区视图。例如,如果一个表含有华盛顿的销售数据,另一个表含有加利福尼亚的销售数据,即可从 UNION 创建这两个表的视图。该视图代表了这两个区域的销售数据。

使用分区视图时,首先创建几个相同的表,指定一个约束以决定可在各个表中添加的数据范围。视图即使用这些基表创建。当查询该视图时,SQL Server 自动决定查询所影响的表,并仅引用这些表。例如,如果一个查询指定只需要华盛顿州的销售数据,则 SQL Server 只读取含有华盛顿销售数据的表,而并不访问其余的表。

分区试图可基于来自多个异类源——如远程服务器——的数据,而不仅仅局限于同一数据库中的表。例如,要将分别存储组织中不同区域数据的几台远程服务器上的数据组合起来,可以创建分布式查询,从每个数据源中检索数据,然后基于这些分布式查询创建视图。所有查询都只从包含查询所请求数据的远程服务器上读取表中的数据,其它在视图中由分布式查询引用的服务器均不被访问。

当在多个表或服务器上分割数据时,因为需扫描的数据较少,所以只访问一部分数据的查询运行得较快。如果表位于不同的服务器或一台多处理器的计算机上,同样可以对查询所涉及的表进行同时扫描,从而改进查询的性能。此外,象索引重建或表备份这样的维护任务可更快地执行。

通过使用分区视图,数据的外观象是一个单一表,且能以单一表的方式进行查询,而无须手动引用真正的基础表。

如果满足下列任一条件,则分区视图可被更新:

在带有逻辑的视图上定义支持 INSERT、UPDATE 和 DELETE 语句的 INSTEAD OF 触发器。


视图和 INSERT、UPDATE 及 DELETE 语句均遵从为可更新分区视图定义的规则。有关更多信息,请参见创建分区视图。
ypnet 2005-04-02
  • 打赏
  • 举报
回复
差不多,视图也可以创建视图索引.

在视图上创建索引的另一个好处是:查询优化器开始在查询中使用视图索引,而不是直接在 FROM 子句中命名视图。这样一来,可从索引视图检索数据而无需重新编码,由此带来的高效率也使现有查询获益。

在视图上创建聚集索引可存储创建索引时存在的数据。索引视图还自动反映自创建索引后对基表数据所做的更改,这一点与在基表上创建的索引相同。当对基表中的数据进行更改时,索引视图中存储的数据也反映数据更改。视图的聚集索引必须唯一,从而提高了 SQL Server 在索引中查找受任何数据更改影响的行的效率。

与基表上的索引相比,对索引视图的维护可能更复杂。只有当视图的结果检索速度的效益超过了修改所需的开销时,才应在视图上创建索引。这样的视图通常包括映射到相对静态的数据上、处理多行以及由许多查询引用的视图。
子陌红尘 2005-03-24
  • 打赏
  • 举报
回复
普通视图只是保存在数据库中的一条SQL语句,查询视图可以等同于查询子查询返回的结果集
直接查询视图往往会因为无法引用源表的索引而导致性能偏低
jinjazz 2005-03-24
  • 打赏
  • 举报
回复
帮助里面输入 "视图",信息就很全了

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧