📄 473.html
字号:
<br>图形化的执行规划<br><br> 查询处理器从统计信息中提取索引关键字的分布信息,除了用户可以手工执行UPDATE STATISTICS之外,查询处理器还可以自动收集统计这些分布信息。这样,就能够充分保证查询处理器使用最新的统计信息,保证执行规划具有很高的优化程度,减少了维护的需要。<br><br>在以前的SQL Server中,使用SHOWPLAN方法允许用户查看某一个特定语句的处理器所创建的执行规划。用户可以根据这些信息来确定如何提高该查询语句的性能,例如修改查询语句的结构、增加另外的数据库索引。在SQL Server 7.0中,查询处理器可以提供某一个语句的执行规划的图形化表示。在查询处理器中,每一个图标表示执行规划中的一个步骤。可以在图标之间移动光标,光标在哪一个图标上,就会显示该执行规划步骤的详细内容。通过不用实际执行查询语句就图形化地显示查询语句的执行规划,可以实际地体会到不同的查询语句的结构对执行规划的影响。为了提高查询语句的性能,可以使用表优化隐藏、查询语句优化隐藏和连接优化隐藏。<br><br>当然,使用查询处理器生成的执行规划,也有一些限制。例如,使用执行规划只能提高单个查询语句的性能,但是可能对整个系统的性能产生正面的或者付面的影响,因此,要想提高整个系统的查询性能,应该使用如索引调整向导这样的工具。<br><br>5、优化索引<br><br>可以利用查询处理器中的执行规划信息,来确定如何优化查询语句的结构和在查询语句中是否创建索引。索引是加速检索表中记录的一种关键字组成的树状结构。索引可以加快对表中数据的检索速度和排序速度。索引有两种类型,一种是聚簇索引,另一种是非聚簇索引。在一个表中,最多只能有一个聚簇索引。在聚簇索引中,表中数据的物理顺序和索引的顺序相同,都是有序的,这种结构可以大大提高数据检索的速度。在非聚簇索引中,表中数据的物理顺序与数据的插入顺序相同,是紊乱的,而与索引的顺序是不相同的。<br><br>当在有数据的表中创建索引时,可以使用FILLFACTOR选项指定每一个叶级索引节点的填充的百分比。缺省值是0,该数值等价于100。在创建索引的时候,内部索引节点总是留有了一定的空间,这个空间足够容纳一个或者两个表中的记录。在没有数据的表中,当创建索引的时候,不要使用该选项,因为这时该选项是没有实际意义的。另外,该选项的数值在创建时指定以后,不能动态地得到维护,因此,只应该在有数据的表中创建索引时才使用。PAD_INDEX选项将FILLFACTOR选项的数值同样也用于内部的索引节点,使内部的索引节点的填充度与叶级索引的节点中的填充度相同。DROP_EXISTING选项指定表中已有的聚簇索引应该删除重建,然后重建全部已经存在的非聚簇索引,使用该选项可以加快索引的创建速度。<br><br>在以前的SQL Server版本中,在一个查询语句中,一个表上最多使用一个索引。而在SQL Server 7.0中,索引操作得到了增强。SQL Server现在使用索引插入和索引联合算法来实现在一个查询语句中的可以使用多个索引。共享的行标识符用于连接同一个表上的两个索引。<br><br>如果某个表中有一个聚簇索引,因此有一个聚簇键,那么该表上的全部非聚簇索引的叶节点使用该聚簇键作为行定位器,而不是使用物理记录标识符。如果表中没有聚簇索引,那么非聚簇索引继续使用物理记录标识符指向数据页。在上面的两种情况中,行定位器是非常稳定的。当聚簇索引的叶节点分开时,由于行定位器是有效的,所以非聚簇索引不需要被修改。如果表中没有聚簇索引,那么页的分开就不会发生。<br><br> 而在以前的版本中,非聚簇索引使用物理记录标识符如页号和行号,作为行的定位器。例如,如果聚簇索引(数据页)发生分解时,许多记录行被移动到了一个新的数据页,因此有了多个新的物理记录标识符。那么,所有的非聚簇索引都必须使用这些新的物理记录标识符进行修改,这样就需要耗费大量的时间和资源。<br><br>6、分布式查询<br><br> 查询处理器可以使用OLE DB与SQL Server的数据存储组件进行通讯。OLE DB为SQL Server 7.0查询处理器提供了分布式的和多机种环境的查询能力。查询处理器既支持在多个SQL Server 7.0服务器之间的分布式查询,也支持SQL Server 7.0服务器与OLE DB提供器之间的分布式查询。分布式查询可以访问存储在相同的或者不同的计算机上的多个数据源中的数据,这时,需要使用OLE DB。这些数据源是运行SQL Server的多个服务器、多机种数据库、文件系统和网络源。<br><br>OLE DB是由微软开发的最新的数据访问编程界面,OLE DB作为SQL Server 7.0的一个组成部分提供给了用户。微软将OLE DB作为ODBC的继承者。就象ODBC一样,OLE DB也提供了访问关系型数据库的方法,但是OLE DB扩展了ODBC的功能,它比原先的ODBC具有更加强大的功能。OLE DB是作为所有数据类型的标准界面来设计的,因此,它除了可以访问关系型数据库之外,还可以访问其他许多数据源,包括Execl表格、ISBM文件、电子邮件、DB2数据等。<br><br>7、优化隐藏<br><br>概述<br><br>一般地,对查询语句,查询处理器创建了可以提高性能的执行规划。然而,如果对某一个特定的查询语句例如检索、插入、删除、修改,查询处理器没有创建最好的执行规划,那么用户可以在查询语句中增加优化隐藏来影响查询处理器创建出最优的执行规划。优化隐藏就是指在执行查询语句、使用多表连接检索或者指定查询语句操作的对象表时,明确地指出应该使用的查询方法、连接算法或者对表的操作方式。当使用优化隐藏时,一定要认真考虑优化隐藏对性能的影响。在SQL Server 7.0中,提供了三种类型的优化隐藏,即查询优化隐藏、连接优化隐藏和表优化隐藏。<br><br>查询优化隐藏<br><br>查询优化隐藏控制整个语句的执行规划。可以通过在SQL语句的最后增加一个OPTION子句,来实现查询优化隐藏。另外,还可以同时指定多个查询优化隐藏,这些选项之间由逗号分割开来。使用Hash Group或者Order Group选项,可以为分组子句或者分组计算子句产生合计数值,但是这两个选项不能同时使用。在联合Union运算符中,可以使用合并、散列和连接选项,这时既可以使用一个选项,也可以同时使用多个选项。当同时使用多个选项时,系统将在这几个选项中选用成本最低的方法进行操作。当把返回查询结果的时间作为关键因素时,应当使用选项Fast n,这样可以最小化返回查询语句所得到的前n条记录的时间。如果需要固定在连接运算符中表的先后顺序,那么可以使用选项Force Order,该选项可以确保在连接运算符中指定的准确的表的顺序。单个查询语句可以使用多个处理器并行执行,选项MaxDop n就是为并行执行查询语句,明确指定可以使用处理器的最大值。<br><br>连接优化隐藏<br><br>连接优化隐藏指定某一个连接运算应该如何最优地实现。连接就是把两个或者多个表中的记录连接起来,通常是连接两个表中的记录。在连接中,使用两个表中的某些列组成连接的条件表达式。为了使用连接优化隐藏,可以在连接运算符之前使用四个关键字中的其中一个关键字,这四个关键字分别是Loop、Hash、Merge和Remote。使用不同的关键字,就是使用不同的连接算法。当使用关键字Loop时,连接算法就是在第一个表中,顺序地阅读表中的每一行。对于第一个表中的一行,顺序地与第二个表中的每一行进行比较,如果满足连接条件,那么就得到在匹配的行。就这样进行下去,直至得到满足条件的全部匹配的行。当使用关键字Hash时,使用的连接算法是这样的,对于第一个表中的每一行,计算在连接中使用的该列的散列值,然后把该散列值存储在散列表中,对于第二个表中的每一行,计算一个在连接中使用的该列的散列值,然后在散列表中寻找匹配的行。通过在散列表中寻找匹配的记录,就可以得到满足连接条件的记录。如果使用关键字Merge,那么可以根据连接列的顺序,使用匹配和合并算法,处理两个表中的每一行,得到满足连接条件的全部记录。关键字Remote很少使用,只有当连接中的两个表存储在不同的系统中时,才可以使用。该关键字指定在连接运算符右端的表所在的系统,开始连接进程。<br><br>当指定连接优化隐藏时,查询处理器强制多个连接运算符的顺序和在每个连接中指定的表的顺序。当没有指定连接优化隐藏时,查询处理器根据连接的表结构和连接条件选择最有效的方法。另外,如果没有指定连接优化隐藏,那么查询处理器可以重新安排表的顺序,如果有多个连接运算符,那么查询处理器也可以重新安排连接运算的顺序,这样可以保证系统使用最有效的连接方法。<br><br>表优化隐藏<br><br>表优化隐藏指定在查询语句中使用的单个基表的访问特征。通过在表名后面增加一个With子句,可以指定表的优化隐藏。在检索、插入、修改和删除等查询语句中都可以使用表优化隐藏。对于多个优化隐藏,可以使用逗号或者空格分割开。<br><br>优化隐藏FastFirstRow最小化该查询语句返回表中第一条记录的时间。该选项与查优化隐藏的Fast 1完全等价。索引优化隐藏Index(IndexName)和Index(IndexID)指定在访问该表时应该使用的索引名称或者索引代号。0表示使用表扫描,1表示使用聚簇索引(如果有聚簇索引)。对于那些非聚簇索引,可以通过使用该索引的名称,强制在查询语句中使用。<br><br>行级锁类型优化隐藏UpdLock使用修改行级锁取代共享行级锁。锁度优化隐藏。这些锁类型只能一次使用一个。选项NoLock和ReadUncommitted,表示查询语句不能获得共享锁,忽略排它锁,也就是说,即使在操作对象上有排它锁,也可以继续访问该对象。这两个关键字是等价的,并且只能用在SELECT语句中。选项PagLock使用共享数据页锁代替共享表锁。RowLock使用共享行锁代替共享页锁或者共享表锁。TabLock获取共享表锁,该锁一直保存到该语句的结束。如果指定了Holdlock或者Serializable选项,那么锁一直保存到该事务的结束。TabLockX获取排它表锁。<br><br>事务独立等级优化隐藏。这些锁类型只能一次使用一个。Holdlock或者Serializable占有共享锁,直到事务的结束,而不是在查询语句不需要这些页锁或者表锁时,就释放它们。这两个关键字等价。ReadCommitted占有共享锁,直到该语句的结束,但是允许其他进程修改读过的数据,因此这种读是不可重复的。RepeatableRead占有锁,防止其他进程修改在查询语句中使用的数据。<br><br>锁级表优化隐藏有两种作用:提高并发性和提高在并行访问同一个表的冲突保护。NoLock、RowLock和PagLock优化隐藏允许多个并发进程。注意,当使用NoLock时,因为它允许阅读那些已经修改但是还没有提交的数据,如果改变这些数据的事务被取消了,那么该查询语句得到的数据与数据库中的内容是不一样的。RowLock和PagLock可以提高系统级的性能,当并行查询访问同一个表中的不同数据时,他们不会放置大量的锁。然而,在另外一些情况下,使用这些选项,由于附加的锁开销,会降低系统的性能。<br><br>选项TabLock和 TabLockX明确指定使用表锁,防止并发访问的冲突。事务独立等级允许在单个语句中使用的锁协议,而不管当前的事务独立等级是什么。ReadUncommitted、ReadCommitted、RepeatableRead和Serializable从最低的保护性和最高的并发性到最高的保护性和最低的并发性。<br><br>8、结论<br><br> 根据客户的反映和需求,SQL Server 7.0在易用性、可伸缩性、可靠性以及数据仓库等方面进行了显著的改进和提高。<br><br> 在易用性方面。客户寻求的是商业问题的解决方案。而大多数所谓的数据库解决方案却带来了多层次的费用支出和复杂性。微软的目标是使SQL Server成为在构建、管理以及部署商业应用程序方面最易于使用的数据库。因此,我们为开发人员提供简单快捷的编程模型,免除对标准操作的数据库管理工作,而且还为复杂操作提供了先进的工具。<br><br> 在伸缩性和可靠性方面。客户对于数据库管理系统的投资表现在为数据库编写的应用程序,以及为部署和管理应用程序而进行的培训。这些投资必须得到保护,即随着业务的增长,数据库也必须能够随之发展,以便处理更多的数据、事务和用户。同时,客户还希望在对数据库应用程序进行精简以用于便携式计算机和分支机构时,也能够保护过去的投资。为了满足这些需求,微软提供了一种单一的数据库引擎,可以用于从运行Windows 95或者Windows98操作系统的便携式计算机到运行Windows NT Server企业版的太字节(terabyte)对称多处理器集群的各种场合。所有这些系统都具有关键商业系统所需的安全性和可靠性。<br><br> 在数据仓库方面。事务处理系统一直是企业数据库基础结构的关键组件。为了更加清楚地了解其数据,各公司也投入了大量的资金。微软的目标是降低数据仓库的成本和复杂性,同时让更多的用户能够拥有这项技术。微软已经为建立数据仓库所需的全部过程设定了一条完善的途径。其目标是通过结合一系列的技术、服务和供应商联盟,来使构建和设计高性能价格比的数据仓库解决方案变得更加简单。<br> <br><br>__________________<br><font color=red>真实源于生活! </font><br>请访问我们的网站: <br>(VB爱好者乐园) <br><a href="http://www.vbgood.com" target=_blank>http://www.vbgood.com</a><br><a href="http://www.d1vb.com" target=_blank>http://www.d1vb.com</a><br><a href="http://61.128.97.225/vbgood/index.asp" target=_blank>http://61.128.97.225/vbgood/index.asp</a><br>拥有1800多个资料! </p></td>
</tr>
</table>
<p>
<CENTER><a href="http://www.jsp001.com/forum/newreply.php?action=newreply&threadid=473">点这里对该文章发表评论</a></CENTER>
<p>该文章总得分是 <font color=red>6</font> 分,你认为它对你有帮助吗?
[<a href=javascript:void(0) onclick=window.open("http://www.jsp001.com/forum/codeVote.php?threadid=473&intVote=4","","menubar=no,toolbar=no,location=no,directories=no,status=no,resizable=no,scrollbars=no,width=70,height=40,top=0,left=0")>非常多</a>](<font color=red>1</font>)
[<a href=javascript:void(0) onclick=window.open("http://www.jsp001.com/forum/codeVote.php?threadid=473&intVote=2","","menubar=no,toolbar=no,location=no,directories=no,status=no,resizable=no,scrollbars=no,width=70,height=40,top=0,left=0")>有一些</a>](<font color=red>1</font>)
[<a href=javascript:void(0) onclick=window.open("http://www.jsp001.com/forum/codeVote.php?threadid=473&intVote=1","","menubar=no,toolbar=no,location=no,directories=no,status=no,resizable=no,scrollbars=no,width=70,height=40,top=0,left=0")>无帮助</a>](<font color=red>1</font>)
[<a href=javascript:void(0) onclick=window.open("http://www.jsp001.com/forum/codeVote.php?threadid=473&intVote=-1","","menubar=no,toolbar=no,location=no,directories=no,status=no,resizable=no,scrollbars=no,width=70,height=40,top=0,left=0")>是灌水</a>](<font color=red>1</font>) </p>
<script language="javascript" src="http://www.jsp001.com/include/read_thread_script.php?threadid=473"></script>
<p><CENTER>
Copyright © 2001 - 2009 JSP001.com . All Rights Reserved <P>
<IMG SRC="../image/jsp001_small_logo.gif" WIDTH="85" HEIGHT="30" BORDER=0 ALT="">
</CENTER></p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -