小魔女 发表于 2015-1-16 22:40:14

MSSQL编程:SQL Server:创立索引视图

因此我们的方案中要构造这种逆操作。Event_type增加一种FLASHBACK_EVENT。这类操作形式与Query_Event相同,都是简单的SQL语句,只是包含了将数据恢复的操作。server|创立|视图|索引
视图也称为假造表,这是由于由视图前往的了局集其一样平常格局与由列和行构成的表类似,而且,在SQL语句中援用视图的体例也与援用表的体例不异。尺度视图的了局集不是永世地存储在数据库中。查询每次援用视图时,Microsoft®SQLServer™2000会静态地将天生视图了局集所需的逻辑兼并到从基表数据天生完全查询了局集所需的逻辑中。天生视图了局的历程称为视图详细化。有关更多信息,请拜见视图剖析。

关于尺度视图而言,为每一个援用视图的查询静态天生了局集的开支很年夜,出格是关于那些触及对大批行举行庞大处置(如聚合大批数据或连接很多行)的视图更加可不雅。若常常在查询中援用这类视图,可经由过程在视图上创立独一会萃索引来进步功能。在视图上创立独一会萃索引时将实行该视图,而且了局集在数据库中的存储体例与带会萃索引的表的存储体例不异。

申明只要安装了MicrosoftSQLServer2000企业版或MicrosoftSQLServer2000开辟版,才能够创立索引视图。



在视图上创立索引的另外一个优点是:查询优化器入手下手在查询中利用视图索引,而不是间接在FROM子句中定名视图。如许一来,可从索引视图检索数据而无需从头编码,由此带来的高效力也使现有查询获益。有关更多信息,请拜见在视图上利用索引。

在视图上创立会萃索引可存储创立索引时存在的数据。索引视图还主动反应自创立索引后对基表数据所做的变动,这一点与在基表上创立的索引不异。当对基表中的数据举行变动时,索引视图中存储的数据也反应数据变动。视图的会萃索引必需独一,从而进步了SQLServer在索引中查找受任何数据变动影响的行的效力。

与基表上的索引比拟,对索引视图的保护大概更庞大。只要当视图的了局检索速率的效益凌驾了修正所需的开支时,才应在视图上创立索引。如许的视图一般包含映照到绝对静态的数据上、处置多行和由很多查询援用的视图。
视图的请求
在视图上创立会萃索引之前,该视图必需满意以下请求:当实行CREATEVIEW语句时,ANSI_NULLS和QUOTED_IDENTIFIER选项必需设置为ON。OBJECTPROPERTY函数经由过程ExecIsAnsiNullsOn或ExecIsQuotedIdentOn属性为视图呈报此信息。

为实行一切CREATETABLE语句以创立视图援用的表,ANSI_NULLS选项必需设置为ON。

视图不克不及援用任何别的视图,只能援用基表。

视图援用的一切基表必需与视图位于统一个数据库中,而且一切者也与视图不异。

必需利用SCHEMABINDING选项创立视图。SCHEMABINDING将视图绑定到基本基表的架构。

必需已利用SCHEMABINDING选项创立了视图中援用的用户界说的函数。

表和用户界说的函数必需由2部分的称号援用。不同意利用1部分、3部分和4部分的称号。

视图中的表达式所援用的一切函数必需是断定性的。OBJECTPROPERTY函数的IsDeterministic属性呈报用户界说的函数是不是是断定性的。有关更多信息,请拜见断定性函数和非断定性函数。

视图中的SELECT语句不克不及包括以下Transact-SQL语法元素:选择列表不克不及利用*或table_name.*语法指定列。必需显式给出列名。

不克不及在多个视图列中指定用作复杂表达式的表的列名。假如对列的一切(或只要一个破例)援用是庞大表达式的一部分或是函数的一个参数,则可屡次援用该列。比方,以下选择列表长短法的:
SELECTColumnA,ColumnB,ColumnA

以下选择列表是正当的:

SELECTColumnA,AVG(ColumnA),ColumnA+ColumnBASAddColAColBSELECTSUM(ColumnA),ColumnA%ColumnBASModuloColAColB
派生表。

行集函数。

UNION运算符。

子查询。

外连接或自连接。

TOP子句。

ORDERBY子句。

DISTINCT关头字。

COUNT(*)(同意COUNT_BIG(*)。)
AVG、MAX、MIN、STDEV、STDEVP、VAR或VARP聚合函数。假如在援用索引视图的查询中指定AVG、MAX、MIN、STDEV、STDEVP、VAR或VARP,假如视图选择列表包括以下交换函数,则优化器会常常盘算必要的了局。庞大聚合函数替换复杂聚合函数AVG(X)

SUM(X),COUNT_BIG(X)

STDEV(X)

SUM(X),COUNT_BIG(X),SUM(X**2)

STDEVP(X)

SUM(X),COUNT_BIG(X),SUM(X**2)

VAR(X)

SUM(X),COUNT_BIG(X),SUM(X**2)

VARP(X)

SUM(X),COUNT_BIG(X),SUM(X**2)



比方,索引视图选择列表不克不及包括表达式AVG(SomeColumn)。假如视图选择列表包括表达式SUM(SomeColumn)和COUNT_BIG(SomeColumn),则SQLServer可为援用视图并指定AVG(SomeColumn)的查询盘算均匀数。
援用可为空的表达式的SUM函数。全文谓词CONTAINS或FREETEXT。COMPUTE或COMPUTEBY子句。假如没有指定GROUPBY,则视图选择列表不克不及包括聚合表达式。假如指定了GROUPBY,则视图选择列表必需包括COUNT_BIG(*)表达式,而且,视图界说不克不及指定HAVING、CUBE或ROLLUP。经由过程一个既能够取值为float值也能够利用float表达式求值的表达式而天生的列不克不及作为索引视图或表的索引的键。CREATEINDEX语句的请求
在视图上创立的第一个索引必需是独一会萃索引。在创立独一会萃索引后,可创立别的非会萃索引。视图上的索引定名划定规矩与表上的索引定名划定规矩不异。独一区分是表名由视图名交换。有关更多信息,请拜见CREATEINDEX。

除一样平常的CREATEINDEX请求外,CREATEINDEX语句还必需满意以下请求:实行CREATEINDEX语句的用户必需是视图的一切者。当实行CREATEINDEX语句时,以下SET选项必需设置为ON:ANSI_NULLSANSI_PADDINGANSI_WARNINGSARITHABORTCONCAT_NULL_YIELDS_NULLQUOTED_IDENTIFIERS必需将选项NUMERIC_ROUNDABORT选项设置为OFF。视图不克不及包括text、ntext或image列,即便在CREATEINDEX语句中没有援用它们。假如视图界说中的SELECT语句指定了一个GROUPBY子句,则独一会萃索引的键只能援用在GROUPBY子句中指定的列。注重事项
创立会萃索引后,关于任何试图为视图修正基础数据而举行的毗连,其选项设置必需与创立索引所需的选项设置不异。假如这个实行语句的毗连没有得当的选项设置,则SQLServer天生毛病并回滚任何会影响视图了局集的INSERT、UPDATE或DELETE语句。有关更多信息,请拜见影响了局的SET选项。

若撤除视图,视图上的一切索引也将被撤除。若撤除会萃索引,视图上的一切非会萃索引也将被撤除。可分离撤除非会萃索引。撤除视图上的会萃索引将删除存储的了局集,而且优化器将从头象处置尺度视图那样处置视图。

只管CREATEUNIQUECLUSTEREDINDEX语句仅指定构成会萃索引键的列,但视图的完全了局集将存储在数据库中。与基表上的会萃索引一样,会萃索引的B树布局仅包括键列,但数据行包括视图了局会合的一切列。

若想为现有体系中的视图增加索引,必需企图绑定任何想要放进索引的视图。能够:撤除视图并经由过程指定WITHSCHEMABINDING从头创立它。创立另外一个视图,使其具有与现有视图不异的文本,可是称号分歧。优化器将思索新视图上的索引,即便在查询的FROM子句中没有间接援用它。

申明不克不及撤除介入到用SCHEMABINDING子句创立的视图中的表或视图,除非该视图已被撤除或变动而不再具有架构绑定。别的,假如对介入具有架构绑定的视图的表实行ALTERTABLE语句,而这些语句又会影响视图界说,则这些语句将会失利。


必需确保新视图满意索引视图的一切请求。这大概必要变动视图及其所援用的一切基表的一切权,以便它们都为统一用户所具有。

转自:http://goaler.xicp.net/ShowLog.asp?ID=526
在需要把许多新记录插入某个数据表的场合,DELAY_KEY_WRITE选项的作用将非常明显。另外,索引还会在硬盘上占用相当大的空间。因此应该只为最经常查询和最经常排序的数据列建立索引。注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。

金色的骷髅 发表于 2015-1-19 21:08:50

外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。

飘灵儿 发表于 2015-1-28 10:42:30

原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!

变相怪杰 发表于 2015-2-5 20:40:30

groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。

活着的死人 发表于 2015-2-13 11:40:02

发几份SQL课件,以飨阅者

仓酷云 发表于 2015-3-3 20:52:47

其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!

简单生活 发表于 2015-3-11 13:23:33

光写几个SQL实在叫无知。

飘飘悠悠 发表于 2015-3-18 13:50:09

SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)

爱飞 发表于 2015-3-25 22:11:33

我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力
页: [1]
查看完整版本: MSSQL编程:SQL Server:创立索引视图