SQL Server数据库技术(92)

2016-01-29 16:56 7 1 收藏

SQL Server数据库技术(92),SQL Server数据库技术(92)

【 tulaoshi.com - SQLServer 】

   在前面我们已经提到过有关视图的下述观点:由于视图返回的结果集与具有行列结构的表有着相同的表格形式,并且我们可以在SQL 语句中像引用表那样引用视图,所以我们常把视图称为虚表。标准视图的结果集并不以表的形式存储在数据库中,而是在执行引用了视图的查询时,SQL Server 2000 才把相关的基本表中的数据合并成视图的逻辑结构。
    上面的结论常让我们产生这样的焦虑:由于是在执行了引用了视图的查询时,SQL Server 2000 才把相关的基本表中的数据合并成视图的逻辑结构,那么当查询所引用的视图包含大量的数据行或涉及到对大量数据行进行合计运算或连接操作,毋庸置疑,动态地创建视图结果集将给系统带来沉重的负担,尤其是经常引用这种大容量视图。
    解决这一令人头痛问题的方法就是为视图创建聚簇索引,只有这样才会显著地提高系统的性能。当在视图上创建了聚簇索引后,视图的结果集与有聚簇索引的表的数据集一样是存储在数据中的。
    此外,在视图上创建索引还会带来这样的好处;优化器可以在那些在FROM 从句中不直接命名视图的查询中使用视图索引,而且对已存在的视图而言,由于不必重新编写查询代码,从而提高了查询从索引视图中检索数据的效率。
    如果在视图上创建索引,那么视图中的数据会被立即存储在数据库中,对索引视图进行修改,那么这些修改会立即反映到基础表中。同理,对基础表所进行的数据修改也会反映到索引视图那里。索引的惟一性大大提高了SQL Server 查找那些被修改的数据行。
    维护索引视图比维护基础表的索引更为复杂。所以,如果认为值得以因数据修改而增加系统负担为代价来提高数据检索的速度,那么应该在视图上创建索引。在为视图创建索引前,视图本身必须满足以下条件: 在执行CREATE VIEW 命令时,必须将ANSI_NULLS 和QUOTED_IDENTIFIER选项设置为ON 状态; 在使用CREATE TABLE 命令创建索引所引用的基础表时,ANSI_NULLS 选项应设置为ON; 该视图所引用的对象仅包括基础表而不包括其它的视图; 视图所引用的基础表必须与视图同属于同一数据库且有相同的所有者; 在创建视图时必须使用SCHEMABINDING 选项; 如果视图引用了用户自定义函数,那么在创建这些用户自定义函数时也必须使用SCHEMABINDING 选项 ; 视图必须以owner.objectname 的形式来使所引用的表或用户自定义函数; 视图所引用的函数必须是确定性的; 另外值得注意的是,在创建视图的SELECT 语句中不应该包含下面的Transact-SQL语法; SELECT 语句中不能使用*或tablename.*来定义列,必须直接给出列名,否则不可以; 表示行集合的函数; UNION、 DISTINCT、 TOP、 ORDER BY、 COMPUTE、 COMPUTE BY、COUNT(*) 等; AVG、 MAX、 MIN、 STDEV、 STDEVP、 VAR 和VARP 等合计运算函数。
通常而言,可以在视图上创建多个索引,但是应该记住,在视图上所创建的第一个索引必须是聚簇索引,然后才可以创建其它的非聚簇索引。
在第八章我们已经详细介绍了CREATE INDEX 命令但是如果准备为视图创建索引那么在执行该命令以前您必须确保以下条件否则创建将会失败。 CREATE INDEX 命令的执行者必须是视图的所有者; 在执行创建索引命令期间,ANSI_NULLS、 ANSI_PADDING、 ANSI_WARNINGS、ARITHABORT、 CONCAT_NULL_YIELDS_NULL、 QUOTED_IDENTIFIERS 诸选项应被设置成ON 状态; NUMERIC_ROUNDABORT 选项被设置为OFF 状态; 视图不能包括text、 ntext、 image 类型的数据列; 如果视图的SELECT 语句中包含ORDER BY 选项,则聚簇索引的关键值只能是ORDER BY 从句中所定义的数据列。

    在视图上创建了索引之后,如果打算修改视图数据,则应该保证修改时的选项设置与创建索引时的选项设置一样,否则SQL Server 将产生错误信息,并回滚所做的INSERT、UPDATE 和DELETE 操作。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/sqlserver/) 

来源:http://www.tulaoshi.com/n/20160129/1499865.html

延伸阅读
标签: SQLServer
在企业管理器中可以很方便地调用其它SQL Server 工具,如SQL Server Query Analyzer (查询分析器)、SQL Server Profiler (跟踪器)等,只须从“Tools (工具)”菜单中选择相应的工具即可。 SQL Server 2000 中提供了大量的向导工具,可以引导用户完成一系列的数据库与服务器管理工作。可以从“Tools (工具)”菜单中选择“Wizards” 选项,或从工...
标签: SQLServer
除了使用系统提供的数据类型外,用户还可以根据需要用自定义的数据类型来定义表的列或声明变量。 7.3.1 用Enterprise Manager 创建用户自定义数据类型 用Enterprise Manager 创建用户自定义数据类型的方法是:在Enterprise Manager 中选择要创建用户自定义类型的数据库,在数据库对象“User Defined Data Types”上单击右键,从开始菜单...
标签: SQLServer
11.3.1 UPDATE 语法 用户可以用UPDATE 语句来更新表中一列或多列数据值,其语法如下: 各参数说明如下: SET SET 子句用于指定更新的方法,即用 的值取代相应的列的值。如果省略 WHERE 子句,那么表中的所有数据均会受到影响。在FROM 子句中指定的表或列的别名不能用于SET 子句中。 column_name 指定要更新数据的列。IDENTITY 列不能...
标签: SQLServer
    在MS SQL Server 2000 中,创建一个存储过程有两种方法:一种是使用Transaction-SQL 命令Create Procedure, 另一种是使用图形化管理工具Enterprise Manager。 用Transaction- SQL 创建存储过程是一种较为快速的方法,但对于初学者,使用Enterprise Manager 更易理解,更为简单。 当创建存储过程时,需要确定存储过程...
标签: SQLServer
每一个游标必须有四个组成部分这四个关键部分必须符合下面的顺序; 1.DECLARE 游标 2.OPEN 游标 3.从一个游标中FETCH 信息 4.CLOSE 或DEALLOCATE 游标 通常我们使用DECLARE 来声明一个游标声明一个游标主要包括以下主要内容: 游标名字 数据来源(表和列) 选取条件 属性(仅读或可修改) 其语法格式如下: DECLARE cursor_name [INSENSITIVE] [...

经验教程

972

收藏

68

精华推荐

SQL Server数据库技术(94)

SQL Server数据库技术(94)

演绎_新的精彩

SQL Server数据库技术(85)

SQL Server数据库技术(85)

可靠的铁柱

SQL Server数据库技术(99)

SQL Server数据库技术(99)

姐你惹不起659

微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部