??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲欧洲精品无码AV,亚洲校园春色小说,亚洲第一精品福利http://www.tkk7.com/jiabao/category/30685.html會只會i垂青有准備的hQ運氣不是每個h都有?zh-cnSat, 12 Apr 2008 00:29:34 GMTSat, 12 Apr 2008 00:29:34 GMT60关于JAVA的分|询操作技?/title><link>http://www.tkk7.com/jiabao/archive/2008/04/11/192222.html</link><dc:creator>金家?/dc:creator><author>金家?/author><pubDate>Fri, 11 Apr 2008 08:47:00 GMT</pubDate><guid>http://www.tkk7.com/jiabao/archive/2008/04/11/192222.html</guid><wfw:comment>http://www.tkk7.com/jiabao/comments/192222.html</wfw:comment><comments>http://www.tkk7.com/jiabao/archive/2008/04/11/192222.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jiabao/comments/commentRss/192222.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jiabao/services/trackbacks/192222.html</trackback:ping><description><![CDATA[ <h1>  Servlet版性能试</h1> <div class="yes4msm" id="memo"> <p>  主要考虑的Servlet版运行方式有Q?/p> <p>  一QServlet在Web容器中的q行机制</p> <p>  1Q?单独一个无状态的Servlet实例q行</p> <p>  即Web容器里的多个U程调用一个Servlet实例的运行方?/p> <p>  2Q?多个Servlet实例</p> <p>  在Web容器中有多个Servlet实例的对象池Qƈ有多个Web容器U程来分别调用执?/p> <p>  二:(x)Servlet q接数据库的方式</p> <p>  1Q?一对一</p> <p>  卛_每个Servlet实例都有直接的数据库q接?/p> <p>  具体方式有:(x)</p> <p>  1> 在Servlet实例的每个处理方法中每次都调用数据库q接Q然后用此连接进行数据库的查询等操作Q最后关闭ƈ释放此连接?/p> <p>  2> 在Servlet实例的初始化操作时就q接一个“长”的数据库连接,直到Servlet实例在destroy时关闭ƈ释放此数据库q接?/p> <p>  因ؓ(f)现在的数据库操作主要是查询,没有Ҏ(gu)据库的增加、修改等操作Q多用户业务查询、Web容器多线E同时对一个Servlet的同一个数据库q接q行操作应该?x)没有数据操作同步等问题?/p> <p>  2Q?使用Web容器的数据源</p> <p>  q里主要是用Web容器的数据源Q数据库q接池?/p> <p>  在理Zq种方式能提供最佳的性能。这是也是测试各UWeb容器产品在数据库q接池上实现的性能情况?/p> <p>  q里主要看Web容器的在各种应用情况下的最优化配置?/p> <p>  Servlet与数据源q接的实现方式:(x)</p> <p>  Servlet直接从Web容器配置中取得数据源?qing)其q接对象Q然后通过此连接对象来操作数据库。对于数据库q接对象的管理由Web容器来管理?/p> <p>  三:(x)要考虑的问题:(x)</p> <p>  1Q?大数据量传输问题</p> <p>  大数据量通过Servlet实例从数据库中取得ƈ整理后,如何有效的传输到客户端IEQƈ且Servlet实例如何有效在Web容器中处理这些大数据量?/p> <p>  2Q?对各UJDBC版本的测?/p> <p>  即不同的数据库用其自己专用的JDBC来连接,在性能上应该要好一些?/p> <p>  q里也可比较Weblogic Server中实现JDBC与各U数据库QMSSQL、OracleQ专用的差别Q从试的结果看出Weblogic Server的技术实例以?qing)是否真正做C(jin)数据库连接等处理的优化了(jin)吗?/p> <p>  3Q?Weblogic Server的优化配|?/p> <p>  3Q? 对象池配|?/p> <p>  包括应用逻辑处理对象的对象池化以?qing)用数据源时的数据库连接对象池在各U具体应用环境下的优化配|?/p> <p>  3Q? U程池配|?/p> <p>  以上两个斚w涉及(qing)到对象池化和串行化处理的{略?/p> <p>  3Q? Weblogic Server 的配|的各种参数的相应情况下的配|?/p> <p>  1> JAVA VM (JAVA 虚拟?参数在各U应用情况下的配|?/p> <p>  2> Weblogic Server 本n的各U参数配|?/p> <p>  鉴于以上的考虑对Servlet版的试规划Z下几U测试用例:(x)</p> <p>  序号 部v包名(*.JAR *.WAR *.EAR {? 数据源配|?Weblogic Server</p> <p>  的配|?预期l果 说明 可能出现的问题和现象</p> <p>  1 ServletQueryForPerConn.war 在每此业务处理时创徏数据库连接,操作完毕后关闭ƈ释放?/p> <p>  通过Web.xml配置文g来配|JDBC的驱动类型和q接?直接部vServletQueryForPerConn.jar部v包?/p> <p>  Web容器中只有一个Serverlet实例?/p> <p>  配置较多的线E数量?/p> <p>  性能差?/p> <p>  在每此业务处理时创徏数据库连接,操作完毕后关闭ƈ释放?/p> <p>  此包中没有设计到U程同步的有关代码?数据库很忙(因ؓ(f)数据库要接收频繁的数据库q接Q?/p> <p>  可能瓉在数据库寚wJ的q接处理?/p> <p>  数据库事务方面:(x)׃是在每次处理时就调用数据库连接ƈ查询Q因此数据库的事务处理应该是单独在一个独立的处理q程中,与ƈ行的其他U程的处理没有关pR?/p> <p>  2 ServletQueryForOnceConn.war Servlet对象只是的初始化时连接与数据库的一个连接,在以后的操作中式中用这个连接?/p> <p>  通过Web.xml配置文g来配|JDBC的驱动类型和q接?直接部vServletQueryForOnceConn.jar包;</p> <p>  Web容器只有一个Servlet实例?/p> <p>  配置较多的线E数量?/p> <p>  性能较差?/p> <p>  Servlet对象只是的初始化时连接与数据库的一个连接,在以后的操作中式中用这个连接?/p> <p>  此包中没有设计到U程同步的有关代码?数据库连接只有一个?/p> <p>  可能瓉在Web容器的多个线E对同一个数据库q接对象的同步等处理Q这些同步处理是Web容器自己理的)(j)?/p> <p>  可能出现查询的数据在多个客户h中打乱(因ؓ(f)同时使用同一个数据库通信通道Q;</p> <p>  q且多个U程Q单独的处理单元Q可能会(x)在同一个处理事务中Q可能各个处理单元会(x)串行操作数据库(q要看数据库的具体实C(jin)Q?/p> <p>  3 ServletQueryForConnPool.war 直接使用Web容器的数据源和数据库q接池?配置数据源及(qing)数据库连接池?/p> <p>  Ҏ(gu)实际情况优化配置数据源和q接池。如可徏立多个连接池{配|?性能好?Servlet实例不管数据库连接,而是直接从Web容器中取得数据库q接。数据库的连接对象有Web容器全权理?/p> <p>  此包中没有设计到U程同步的有关代码?对Web容器的数据库q接池的配置可能要根据具体情况进行有效的调整Q如数据库连接对象个数和W(xu)eb容器配额的线E个数的关系{)(j)。如果配|不?jng)_能是性能瓉在Web容器或者在数据库方?/p> <p>  4 ServletQueryForConnPool.war</p> <p>  Q同试3Q?同测? Web容器的数据源重新配置为数据库产品专用的JDBC驱动器?性能好?试目的是比较各U不同的JDBC数据q接驱动器的性能Q以便得出根据不同的数据库品选择最佳的JDBC驱动器?/p> <p>  只测试数据库产品提供的专用JDBC驱动器?/p> <p>  Q说明:(x)因ؓ(f)试3在理Z性能是最好,因此选用试3。测试方法和试3一Pq样才有可比性。)(j) 同测??/p> <p>  5 servletQueryDS_Cache.war 同测? 同测? 性能一?/p> <p>  使用一变量来缓存查询的数据Q用户以后的分页查询查询操作是直接从此缓存中取得的?/p> <p>  q种方式对Web容器的内存要求高Q效果不是很好,Ҏ(gu)据量查询的效果可能?x)好些?优点Q?/p> <p>  减少的了(jin)Ҏ(gu)据库讉K的次数?/p> <p>  ~点Q?/p> <p>  需要较大的内存。对Weblogic容器的内存要求高Q对于有大量用户的查询操作,q且查询的结果集较大Ӟ可能Ҏ(gu)个系l的性能是个很大的瓶颈?/p> <p>  </p> <p>  对大量数据的分页处理</p> <p>  问题描述Q?/p> <p>  背景1Q一客户通过IEhWeb服务器查询数据,而查询结果是上千条甚x上万条记录,要求查询l果传送到IE客户端ƈ分页昄?/p> <p>  背景2Q一客户通过IE或者其他方式请求Web服务器查询数据,而查询结果是上千条甚x上万条记录,q要求查询结果把包传送到客户的E-mail中?/p> <p>  问:(x)对于q样的有大量数据的结果集Q在Web服务器端如何有效的处理?</p> <p>  可能涉及(qing)到的问题Q?/p> <p>  1Q?内存占用</p> <p>  大量数据的结果集Q可能要</p> <p>  2Q?传输速度?qing)策?/p> <p>  具体的分处理技?/p> <p>  </p> <p>  序号 名称 处理Ҏ(gu) 针对的数据库 例子说明 备注</p> <p>  1 游标查询 直接使用ResultSet来处理。ResultSet是直接在数据库上建立游标Q然后通过ResultSet的行位置定位接口来获得指定行位置的记录?/p> <p>  当用L(fng)一h数据查询Ӟ执行SQL语句查询Q获得的ResultSet对象?qing)其要用的q接对象都保存到其对应的?x)话对象中?/p> <p>  以后的分|询都通过W一ơ执行SQL获得的ResultSet对象定位取得指定行位|的记录?/p> <p>  最后在用户不再q行分页查询时或?x)话关闭Ӟ释放数据库连接和ResultSet对象{数据库讉K资源?/p> <p>  说明Q在用例分页查询的整个会(x)话期_(d)一个用L(fng)分页查询p占用一个数据库q接对象和结果集的游标,q种方式Ҏ(gu)据库的访问资源占用比较大Qƈ且其利用率不是很高?所有的数据库品?优点Q?/p> <p>  减少?jin)数据库q接对象的多ơ分配获取,减少?jin)对数据库的SQL查询执行?/p> <p>  ~点Q?/p> <p>  占用数据库访问资源-数据库连接对象,q占用了(jin)数据库上的资源-游标。而这些资源都是十分宝늚有限制的?/p> <p>  l论Q?/p> <p>  q种的数据库查询分页处理方式不是最佳的。一般不适用q种方式?/p> <p>  2 定位行集SQL查询 主要是直接用数据库产品的提供的Ҏ(gu)询的l果集可定位行范围的SQL接口技术?/p> <p>  在用L(fng)分页面查询请求中Q每ơ可取得查询h的行范围的参敎ͼ然后使用q些参数生取得指定行范围的的SQL查询语句Q然后每ơ请求获得一个数据库q接对象q执行SQL查询Q把查询的结果返回给用户Q最后释放说有的数据库访问资源?/p> <p>  说明Q这U方式需要每ơ请求时都要执行数据库的SQL查询语句Q对数据库的讉K资源是用完q即释放,不白白占用数据库讉K资源?对特定(提供?jin)对查询l果集可定位功能的)(j)的数据库产品?/p> <p>  如:(x)Oracle,DB2, PostgreSQL,mySQL{?MS SQL Server 没有提供此技术? ?</p> <p>  1Q?Oracle数据库用关键字Qrowid或rownum </p> <p>  2Q?DB2:</p> <p>  rowid或rownum ()</p> <p>  3Q?PostgreSQL 使用LIMIT ?OFFSET</p> <p>  4Q?MySQL 使用Limit 优点Q?/p> <p>  q种技术是直接使用数据库品自己提供的可对查询l果集定位行范围qo(h)的功能,因此直接利用?jin)数据库的性能Ҏ(gu)分页查询的优化功能?/p> <p>  Ҏ(gu)据库的访问资源(数据库连接对象,数据库游标等Q没有浪费,q些资源的充分重复的利用?/p> <p>  Ҏ(gu)询的l果对Web容器没有什么特别要求?/p> <p>  ~点Q?/p> <p>  要执行多ơ数据库SQL查询操作。对每次的分面操作h都要指定相应范围的结果集来执行SQL语句的数据库查询操作Q这Ҏ(gu)据库有一定的影响?/p> <p>  Ҏ(gu)ơ分面查询h要频J的从Web容器中获得数据库讉K资源Q数据库q接对象和数据库游标Q?/p> <p>  要依赖于具体的数据库产品。因为对没有实现没有提供此技术的数据库品不能用此方式?/p> <p>  l论Q?/p> <p>  ׃每次Ҏ(gu)据库的SQL查询操作相对而言耗用的数据资源比较少Qƈ且在实际用户的操作中Q有可能用户Ҏ(gu)询的所有结果集只是需要查看其中的部分面?/p> <p>  因此q种方式是最佳的?/p> <p>  3 特别处理的定位行集SQL查询 q种方式是在方式2的基上针对不提供Ҏ(gu)询结果集行范围定位的数据库品?/p> <p>  其在Web容器端的操作逻辑大致和方?相同?/p> <p>  只是先要对要查询的数据库表要有一字段的数据能区别每条不同的数据记录。第一ơ查询时Q获得用来可唯一标识不同记录的字D늚所有结果集Qƈ~存h以备后面的分面查询指定要查询的l果集的行范围?主要是针对不同对查询行集可定位范围获得的数据库品,如MS SQL Server{?假设从AQBQC三个表中选取数据。且A有字DID用来可唯一区别不同的记录?/p> <p>  那么W一ơ查询的时候,?x)查询两?. select A.id from A,B,C where condition.</p> <p>  2. 把A的ID~存到SESSION?3.从Session中。现可按照次序来取得相应面范围的ID来,q构造下一个查询语句:(x)select A.name, B.add from A,B,C where condition && ( </p> <p>  A.ID in 本页面范围的 ID )</p> <p>  以后每次页的时候,依次获得对应늚ID只要表中唯一的就可以?jin)。无所谓大,序?q样QSESSSION~存的就只是一列而不是所有列?jin)。当?dng)对于列数不多的,效果q不好?/p> <p>  也可使用存储q程实现Q可参照Q?a taggedby="hylanda">http://expert.csdn.net/Expert/topic</a></p> <p>  /2365/2365596.xml?temp=.7529261</p> <p>  优点Q?/p> <p>  同方?</p> <p>  ~点Q?/p> <p>  同方?Q?/p> <p>  q要在要查询的数据库表中建立一个相应的ID,用来唯一区别每条记录?/p> <p>  l论Q?/p> <p>  同方??/p> <p>  4 ~存一ơSQL查询的结果集 优点Q?/p> <p>  ~点Q?/p> <p>  既然我们要缓存结果,那么用户可能会(x)看到q期的数?/p> <p>  </p> <p>  说明Q对于实际情늚应用来说Q一般结合实际情况,l合使用方式2Q或方式3Q和方式4。如Q一个应用场景:(x)对公司的产品的查询是l常的,但是产品的种cM是很多,q时可用缓存方式;但是Ҏ(gu)些查询结果集较大Q数据库和W(xu)eb容器之间的网l访问由可能是远E的Q这时候可考虑使方?Q或者方?Q?/p> <p>  试用例代码实现说明</p> <p>  一Q测试用?QServletQueryForConnPool 版本</p> <p>  1Q结构图</p> <p>  </p> <p>  2Q代码实现结?/p> <p>  3Q运行时序图</p> <p>  4Q测试运行情况说?/p> <p>  4Q? 数据库连接和数据库游标占用可能比较大</p> <p>  ׃数据库的查询?qing)其分页处理是直接用JDBC的,q在分页中是使用RseultSet的查询结果集Q游标Ş式实现的Qƈ且每个客户对应一个会(x)话,每个?x)话对应一个数据库q接和一个结果集Q游标)(j)Q数据库q接和游标是在会(x)话终止时才释攄。因此在多个客户的请求过E中Q可能对数据库的讉K资源Q数据库q接和用于数据操作的游标Q占用比较大?/p> <p>  因此数据库访问及(qing)其数据库的处理可能是个瓶颈?/p> <p>  4Q? 资源没有释放的问?/p> <p>  ?x)话对应的数据库q接和游标可能在?x)话l止时没有释放?/p> <p>  Z(jin)更好的体现出使用Web容器数据库连接池的优点,应该合理的设|连接池中连接对象的“非zd时旉”,ơ值和Servlet对象的会(x)话超时时间长度一直?/p> <p>  5Q此试用例操作说明</p> <p>  5Q? 部v的包的位|:(x)</p> <p>  ServletQueryForConnPool.war</p> <p>  5Q? 部v</p> <p>  1Q通过Weblogic 的控制台工具部v此包</p> <p>  2Q相关的参数L(fng)ServletQueryForConnPool.war包中的配|文件web.xml中相应的servlet配置参数 </p> <p>  5Q? 试URL</p> <p>  http://ServerQport/WebAppName</p> <p>  卻I(x)</p> <p>  http://Web服务器名Q端?Servlet部v的应用程序名</p> <p>  二:(x)试用例4 ServletQueryForConnPool_cache 版本</p> <p>  1Q结构图</p> <p>  和“一Q测试用?”相?/p> <p>  2Q代码实现结?/p> <p>  3Q运行时?/p> <p>  说明Q用第四种“缓存一ơSQL查询的结果集”的分页面查询技术,即一ơSQL查询Q把从数据库查询出来的结果保存到?x)话中,以后的客户分|询操作都从此~存中取得?/p> <p>  4Q测试运行情况说?/p> <p>  ׃使用的是~存l果集的方式Q对Web容器服务器的内存要求比较高,可能在测试过E中QW(xu)eb容器服务器因内存问题而媄(jing)响整个系l的响应性能?/p> <p>  5Q此试用例操作说明</p> <p>  5Q? 部v的包的位|:(x)</p> <p>  ServletQueryForConnPool_cache.war</p> </div> <!--新闻内容//--> <!--评论发布--> <img src ="http://www.tkk7.com/jiabao/aggbug/192222.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jiabao/" target="_blank">金家?/a> 2008-04-11 16:47 <a href="http://www.tkk7.com/jiabao/archive/2008/04/11/192222.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL基础常识http://www.tkk7.com/jiabao/archive/2008/04/09/191612.html金家?/dc:creator>金家?/author>Tue, 08 Apr 2008 17:08:00 GMThttp://www.tkk7.com/jiabao/archive/2008/04/09/191612.htmlhttp://www.tkk7.com/jiabao/comments/191612.htmlhttp://www.tkk7.com/jiabao/archive/2008/04/09/191612.html#Feedback0http://www.tkk7.com/jiabao/comments/commentRss/191612.htmlhttp://www.tkk7.com/jiabao/services/trackbacks/191612.htmlIBM的圣U瑟研究实验室ؓ(f)其关pL据库理pȝSYSTEM R开发的一U查询语aQ它的前w是SQUARE语言。SQL语言l构z,功能强大Q简单易学,所以自从IBM公司1981q推Z来,SQL语言Q得C(jin)q泛的应用。如今无论是?a target="_blank">Oracle ,Sybase,Informix,SQL serverq些大型的数据库理pȝQ还是像Visual Foxporo,PowerBuilderq些微机上常用的数据库开发系l,都支持SQL语言作ؓ(f)查询语言?br />
SQL是高U的非过E化~程语言Q允许用户在高层数据l构上工作。他不要求用h定对数据的存放方法,也不需要用户了(jin)解具体的数据存放方式Q所以具有完全不同底层结构的不同数据库系l可以用相同的SQL语言作ؓ(f)数据输入与管理的接口。它以记录集合作为操U对象,所有SQL语句接受集合作ؓ(f)输入Q返回集合作出,q种集合Ҏ(gu)允怸条SQL语句的输Z为另一条SQL语句的输入,所以SQL语言可以嵌套Q这使他h极大的灵zL和强大的功能,在多数情况下Q在其他语言中需要一大段E序实现的一个单独事件只需要一个SQL语句可以达到目的,q也意味着用SQL语言可以写出非常复杂的语句?

SQL同时也是数据库文件格式的扩展名?

SQL语言包含4个部分:(x)

数据查询语言QSELECT语句Q?

数据操纵语言QINSERT, UPDATE, DELETE语句Q?

数据定义语言Q如CREATE, DROP{语句)(j)

数据控制语言Q如COMMIT, ROLLBACK{语句)(j)

取自"http://zh.wikipedia.org/wiki/SQL"
SQL(STructured Query Language)是一U资料库查询和程式设计语aQ用於存取资料以?qing)查询、更新和理兌式资料库pȝ。美国国家标准局QANSIQ与国际标准化组l(ISOQ已l制定了(jin) SQL 标准。ANSI 是一个美国工业和商业集团l织Q发展美国的商务和通讯标准。ANSI 同时也是 ISO ?International Electrotechnical CommissionQIECQ的成员之一。ANSI 发布与国际标准组l相应的国标准?992q_(d)ISO ?IEC 发布?SQL 的国际标准,UCؓ(f) SQL-92。ANSI 随之发布的相应标准是 ANSI SQL-92。ANSI SQL-92 有时被称?ANSI SQL。尽不同的兌式资料库使用?SQL 版本有一些差异,但大多数都遵?ANSI SQL 标准。SQL Server 使用 ANSI SQL-92 的扩展集Q称?T-SQLQ其遵@ ANSI 制定?SQL-92 标准?br />
      SQL 语言包括两种主要E式设计语言cd的陈q式Q?资料定义语言 QDDLQ与资料操作语言 QDMLQ。下面我们将介绍q两c语a?br />
DDL
 

      DDL 用於定义和管理物Ӟ例如资料库、资料表以及(qing)(g)视表Q?W?8?会(x)解释何谓(g)视表Q。DDL 陈述式通常包括每个物g的CREATE、ALTER 以及(qing) DROP 命o(h)。D例来_(d)CREATE TABLE、ALTER TABLE 以及(qing) DROP TABLE q些陈述式便可以用来建立新资料表、修改其属性(如新增或删除资料行)(j)、删除资料表{,下面我们?x)一一介绍?br />
CREATE TABLE 陈述?br /> 

使用 DDL ?MyDB 资料库徏立一个名?Customer_Data 的范例资料表Q本章后面的例子我们?x)用到q个资料表。如前所qͼCREATE TABLE 陈述式可以用来徏立资料表。这个范例资料表被定义成四个资料行,如下所C:(x)

Use MyDB
CREATE TABLE Customer_Data
(customer_id smallint,
first_name char(20),
last_name char(20),
phone char(10))
GO
q个陈述式能产生 Customer_Data 资料表,q个资料表会(x)一直是I的直到资料被填入资料表内?br />
ALTER TABLE 陈述?br /> 

ALTER TABLE 陈述式用来变更资料表的定义与属性。在下面的例子中Q我们利?ALTER TABLE 在已l存在的 Customer_Data 资料表中新增 middle_initial 资料行?br />
ALTER TABLE Customer_Data
ADD middle_initial char(1)
GO
现在资料表的定义包括?jin)五个资料行Q而不是之前的四个资料行。关g用ALTER TABLE 的更多细节,请参?W?5??br />
DROP TABLE 陈述?br /> 

DROP TABLE 陈述式用来删除资料表定义以及(qing)所有的资料、烦(ch)引、触发程序、条件约束以?qing)资料表的权限。要删除我们?Customer_Data 资料表,可利用下列命令:(x)

DROP TABLE Customer_Data
GO
x DROP TABLE 陈述式的详细内容Q请参阅 W?5??br />
DML
 

DML 利用 INSERT、SELECT、UPDATE ?DELETE {陈q式来操作资料库物g所包含的资料?br />
INSERT 陈述?br /> 

INSERT 陈述式用来在资料表或(g)视表中插入一列资料。例如,如果要在Customer_Data 资料表中新增一个客P可用类g下的 INSERT 陈述式:(x)

INSERT INTO Customer_Data
(customer_id, first_name, last_name, phone)
VALUES (777, "Frankie", "Stein", "4895873900")
h?SQL 陈述式中W二行的资料行名U清单,清单上资料行名称的次序决定了(jin)资料数值将被放在哪个资料行。D例来_(d)W一个资料数值将被放在清单列出的W一个资料行 customer_id、第二个资料数值放在第二个资料行,依此cL。由于我们在建立资料表时Q定义资料资料行填入数值的ơ序与现在相同,因此我们不必Ҏ(gu)指定栏位名称。我们可以用以下?INSERT 陈述式代替:(x)

INSERT INTO Customer_Data
VALUES (777, "Frankie", "Stein", "4895873900")

注意

如果使用q种形式?INSERT 陈述式,但被插入的数值次序上与徏立资料表时不同,数值将被放入错误的资料行。如果资料的型别与定义不W,则会(x)收到一个错误讯息?br />

--------------------------------------------------------------------------------

SELECT 陈述?br /> 

SELECT 陈述式用来检索资料表中的资料Q而哪些资料被(g)索由列出的资料行与陈q式中的 WHERE 子句军_。例如,要从之前建立?Customer_Data 资料表中(g)?customer_id 以及(qing) first_name 资料行的资料Qƈ且只惛_出每列中 first_name 资料行gؓ(f) Frankie 的资料,那麼可以利用以下?SELECT 陈述式:(x)

SELECT customer_id, first_name FROM Customer_Data
WHERE first_name = "Frankie"
如果有一列符?SELECT 陈述式中的标准,则结果将昄如下Q?br />
customer_id     first_name
-------------    ------------
777              Frankie
UPDATE 陈述?br /> 

UPDATE 陈述式用来更新或改变一列或多列中的倹{例如,一位名UCؓ(f) Frankie Stein 的客h要在记录中改变他的姓氏ؓ(f) FranklinQ可使用以下 UPDATE 陈述式:(x)

UPDATE Customer_Data
SET first_name = "Franklin"
WHERE last_name = "Stein" and customer_id= 777
我们?WHERE 子句中加?customer_id 的项目来定其他名称?Stein 的客户不?x)被影响Q只有customer_id?77的客P姓氏?x)有所改变?br />
--------------------------------------------------------------------------------

说明

当?zhn)使?UPDATE 陈述式时Q要定?WHERE 子句提供充分的筛选条Ӟ如此才不?x)不l意地改变了(jin)一些不该改变的资料?br />

--------------------------------------------------------------------------------

DELETE 陈述?br /> 

DELETE 陈述式用来删除资料表中一列或多列的资料,(zhn)也可以删除资料表中的所有资料列。要?Customer_Data 资料表中删除所有的列,(zhn)可以利用下列陈q式Q?br />
DELETE FROM Customer_Data
?br />DELETE Customer_Data
资料表名U前?FROM 关键字在 DELETE 陈述式中是选择性的。除此之外,q两个陈q式完全相同?br />
要从 Customer_Data 资料表中删除 customer_id 资料行的值小?00的列Q可利用下列陈述式:(x)

DELETE FROM Customer_Data
WHERE customer_id &lt; 100
现在我们已经快速浏览了(jin) SQL 提供?DDL ?DML 陈述式,接著Q下面将介绍 T-SQL?br />
SQL中的五种数据cd  

要描qC下SQL中的五种数据cd:字符型,文本型,数值型Q逻辑型和日期?br />
字符?br />
VARCHAR VS CHAR

VARCHAR型和CHAR型数据的q个差别是细微的Q但是非帔R要。他们都是用来储存字W串长度于255的字W?br />
假如你向一个长度ؓ(f)四十个字W的VARCHAR型字D中输入数据BIll GAtES。当你以后从q个字段中取出此数据Ӟ你取出的数据光度ؓ(f)十个字符——字W串Bill Gates的长度?现在假如你把字符串输入一个长度ؓ(f)四十个字W的CHAR型字D中Q那么当你取出数据时Q所取出的数据长度将是四十个字符。字W串的后面会(x)被附加多余的I格?br />
当你建立自己的站Ҏ(gu)Q你?x)发C用VARCHAR型字D要比CHAR型字D|便的多。用VARCHAR型字D|Q你不需要ؓ(f)剪掉你数据中多余的空D操?j)?br />
VARCHAR型字D늚另一个突出的好处是它可以比CHAR型字D占用更的内存和硬盘空间。当你的数据库很大时Q这U内存和盘I间的节省会(x)变得非常重要

文本?br />
TEXT

使用文本型数据,你可以存放超q二十亿个字W的字符丌Ӏ当你需要存储大串的字符Ӟ应该使用文本型数据?br />
注意文本型数据没有长度,而上一节中所讲的字符型数据是有长度的。一个文本型字段中的数据通常要么为空Q要么很大?br />
当你从HTML fORM的多行文本编辑框(TEXTAREA)中收集数据时Q你应该把收集的信息存储于文本型字段中。但是,无论何时Q只要你能避免用文本型字段Q你应该不适用它。文本型字段既大且慢Q滥用文本型字段?x)服务器速度变慢。文本型字段q会(x)吃掉大量的磁盘空间?br />
一旦你向文本型字段中输入了(jin)M数据(甚至是空?Q就?x)?K的空间被自动分配l该数据。除非删除该记录Q否则你无法收回q部分存储空间?br />
数值型

SQL支持许多U不同的数值型数据。你可以存储整数 INT 、小?NUMERIC、和钱数 MONEY?br />
INT VS SMALLINT VS TINYINT

他们的区别只是字W长?

INT型数据的表数范围是从-2Q?47Q?83Q?47?Q?47Q?83Q?47的整?br />
SMALLINT 型数据可以存储从-32768?2768的整?br />
TINYINT 型的字段只能存储??55的整?不能用来储存负数

通常Qؓ(f)?jin)节省空_(d)应该可能的使用最的整型数据。一个TINYINT型数据只占用一个字?一个INT型数据占用四个字节。这看v来似乎差别不大,但是在比较大的表中,字节数的增长是很快的。另一斚wQ一旦你已经创徏?jin)一个字D,要修改它是很困难的。因此,为安全v见,你应该预以下,一个字D|需要存储的数值最大有可能是多大,然后选择适当的数据类型?br />
NUMERIC

Z(jin)能对字段所存放的数据有更多的控Ӟ你可以用NUMERIC型数据来同时表示一个数的整数部分和数部分。NUMERIC型数据你能表示非常大的数——比INT型数据要大得多。一个NUMERIC型字D可以存储从-1038?038范围内的数。NUMERIC型数据还使你能表C有数部分的数。例如,你可以在NUMERIC型字D中存储数3.14?br />
当定义一个NUMERIC型字D|Q你需要同时指定整数部分的大小和小数部分的大小。如:MUNERIC(23,0)

一?NUMERIC型数据的整数部分最大只能有28位,数部分的位数必d于或{于整数部分的位敎ͼ数部分可以是零?br />
MONEY VS SMALLMONEY

你可以?INT型或NUMERIC型数据来存储钱数。但是,专门有另外两U数据类型用于此目的。如果你希望你的|点能挣很多钱,你可以用MONEY型数据。如果你的野?j)不大,你可以用SMALLMONEY型数据。MONEY型数据可以存储从-922Q?37Q?03Q?85Q?77.5808?22Q?37Q?03Q?85Q?77.5807的钱数。如果你需要存储比q还大的金额Q你可以使用NUMERIC型数据?br />
SMALLMONEY型数据只能存储从-214Q?48.3648?14Q?48.3647 的钱数。同P如果可以的话Q你应该用SMALLMONEY型来代替MONEY型数据,以节省空间?br />
逻辑?br />
BIT

如果你用复选框( CHECKBOX)从网中搜集信息Q你可以把此信息存储在BIT型字D中。BIT型字D只能取两个?0??br />
当心(j)Q在你创建好一个表之后Q你不能向表中添?BIT型字Dc(din)如果你打算在一个表中包含BIT型字D,你必d创徏表时完成?br />
日期?br />
DATETIME VS SMALLDATETIME

一?DATETIME型的字段可以存储的日期范围是?753q??日第一毫秒?999q?2?1日最后一毫秒?br />
如果你不需要覆盖这么大范围的日期和旉Q你可以使用SMALLDATETIME型数据。它与DATETIME型数据同样用,只不q它能表C的日期和时间范围比DATETIME型数据小Q而且不如DATETIME型数据精。一个SMALLDATETIME型的字段能够存储?900q??日到2079q??日的日期Q它只能_到秒?br />
DATETIME型字D在你输入日期和旉之前q不包含实际的数据,认识q一Ҏ(gu)重要的?img src ="http://www.tkk7.com/jiabao/aggbug/191612.html" width = "1" height = "1" />

]]>
SQL基础常识http://www.tkk7.com/jiabao/archive/2008/04/09/191613.html金家?/dc:creator>金家?/author>Tue, 08 Apr 2008 17:08:00 GMThttp://www.tkk7.com/jiabao/archive/2008/04/09/191613.htmlhttp://www.tkk7.com/jiabao/comments/191613.htmlhttp://www.tkk7.com/jiabao/archive/2008/04/09/191613.html#Feedback0http://www.tkk7.com/jiabao/comments/commentRss/191613.htmlhttp://www.tkk7.com/jiabao/services/trackbacks/191613.htmlIBM的圣U瑟研究实验室ؓ(f)其关pL据库理pȝSYSTEM R开发的一U查询语aQ它的前w是SQUARE语言。SQL语言l构z,功能强大Q简单易学,所以自从IBM公司1981q推Z来,SQL语言Q得C(jin)q泛的应用。如今无论是?a target="_blank">Oracle ,Sybase,Informix,SQL serverq些大型的数据库理pȝQ还是像Visual Foxporo,PowerBuilderq些微机上常用的数据库开发系l,都支持SQL语言作ؓ(f)查询语言?br />
SQL是高U的非过E化~程语言Q允许用户在高层数据l构上工作。他不要求用h定对数据的存放方法,也不需要用户了(jin)解具体的数据存放方式Q所以具有完全不同底层结构的不同数据库系l可以用相同的SQL语言作ؓ(f)数据输入与管理的接口。它以记录集合作为操U对象,所有SQL语句接受集合作ؓ(f)输入Q返回集合作出,q种集合Ҏ(gu)允怸条SQL语句的输Z为另一条SQL语句的输入,所以SQL语言可以嵌套Q这使他h极大的灵zL和强大的功能,在多数情况下Q在其他语言中需要一大段E序实现的一个单独事件只需要一个SQL语句可以达到目的,q也意味着用SQL语言可以写出非常复杂的语句?

SQL同时也是数据库文件格式的扩展名?

SQL语言包含4个部分:(x)

数据查询语言QSELECT语句Q?

数据操纵语言QINSERT, UPDATE, DELETE语句Q?

数据定义语言Q如CREATE, DROP{语句)(j)

数据控制语言Q如COMMIT, ROLLBACK{语句)(j)

取自"http://zh.wikipedia.org/wiki/SQL"
SQL(STructured Query Language)是一U资料库查询和程式设计语aQ用於存取资料以?qing)查询、更新和理兌式资料库pȝ。美国国家标准局QANSIQ与国际标准化组l(ISOQ已l制定了(jin) SQL 标准。ANSI 是一个美国工业和商业集团l织Q发展美国的商务和通讯标准。ANSI 同时也是 ISO ?International Electrotechnical CommissionQIECQ的成员之一。ANSI 发布与国际标准组l相应的国标准?992q_(d)ISO ?IEC 发布?SQL 的国际标准,UCؓ(f) SQL-92。ANSI 随之发布的相应标准是 ANSI SQL-92。ANSI SQL-92 有时被称?ANSI SQL。尽不同的兌式资料库使用?SQL 版本有一些差异,但大多数都遵?ANSI SQL 标准。SQL Server 使用 ANSI SQL-92 的扩展集Q称?T-SQLQ其遵@ ANSI 制定?SQL-92 标准?br />
      SQL 语言包括两种主要E式设计语言cd的陈q式Q?资料定义语言 QDDLQ与资料操作语言 QDMLQ。下面我们将介绍q两c语a?br />
DDL
 

      DDL 用於定义和管理物Ӟ例如资料库、资料表以及(qing)(g)视表Q?W?8?会(x)解释何谓(g)视表Q。DDL 陈述式通常包括每个物g的CREATE、ALTER 以及(qing) DROP 命o(h)。D例来_(d)CREATE TABLE、ALTER TABLE 以及(qing) DROP TABLE q些陈述式便可以用来建立新资料表、修改其属性(如新增或删除资料行)(j)、删除资料表{,下面我们?x)一一介绍?br />
CREATE TABLE 陈述?br /> 

使用 DDL ?MyDB 资料库徏立一个名?Customer_Data 的范例资料表Q本章后面的例子我们?x)用到q个资料表。如前所qͼCREATE TABLE 陈述式可以用来徏立资料表。这个范例资料表被定义成四个资料行,如下所C:(x)

Use MyDB
CREATE TABLE Customer_Data
(customer_id smallint,
first_name char(20),
last_name char(20),
phone char(10))
GO
q个陈述式能产生 Customer_Data 资料表,q个资料表会(x)一直是I的直到资料被填入资料表内?br />
ALTER TABLE 陈述?br /> 

ALTER TABLE 陈述式用来变更资料表的定义与属性。在下面的例子中Q我们利?ALTER TABLE 在已l存在的 Customer_Data 资料表中新增 middle_initial 资料行?br />
ALTER TABLE Customer_Data
ADD middle_initial char(1)
GO
现在资料表的定义包括?jin)五个资料行Q而不是之前的四个资料行。关g用ALTER TABLE 的更多细节,请参?W?5??br />
DROP TABLE 陈述?br /> 

DROP TABLE 陈述式用来删除资料表定义以及(qing)所有的资料、烦(ch)引、触发程序、条件约束以?qing)资料表的权限。要删除我们?Customer_Data 资料表,可利用下列命令:(x)

DROP TABLE Customer_Data
GO
x DROP TABLE 陈述式的详细内容Q请参阅 W?5??br />
DML
 

DML 利用 INSERT、SELECT、UPDATE ?DELETE {陈q式来操作资料库物g所包含的资料?br />
INSERT 陈述?br /> 

INSERT 陈述式用来在资料表或(g)视表中插入一列资料。例如,如果要在Customer_Data 资料表中新增一个客P可用类g下的 INSERT 陈述式:(x)

INSERT INTO Customer_Data
(customer_id, first_name, last_name, phone)
VALUES (777, "Frankie", "Stein", "4895873900")
h?SQL 陈述式中W二行的资料行名U清单,清单上资料行名称的次序决定了(jin)资料数值将被放在哪个资料行。D例来_(d)W一个资料数值将被放在清单列出的W一个资料行 customer_id、第二个资料数值放在第二个资料行,依此cL。由于我们在建立资料表时Q定义资料资料行填入数值的ơ序与现在相同,因此我们不必Ҏ(gu)指定栏位名称。我们可以用以下?INSERT 陈述式代替:(x)

INSERT INTO Customer_Data
VALUES (777, "Frankie", "Stein", "4895873900")

注意

如果使用q种形式?INSERT 陈述式,但被插入的数值次序上与徏立资料表时不同,数值将被放入错误的资料行。如果资料的型别与定义不W,则会(x)收到一个错误讯息?br />

--------------------------------------------------------------------------------

SELECT 陈述?br /> 

SELECT 陈述式用来检索资料表中的资料Q而哪些资料被(g)索由列出的资料行与陈q式中的 WHERE 子句军_。例如,要从之前建立?Customer_Data 资料表中(g)?customer_id 以及(qing) first_name 资料行的资料Qƈ且只惛_出每列中 first_name 资料行gؓ(f) Frankie 的资料,那麼可以利用以下?SELECT 陈述式:(x)

SELECT customer_id, first_name FROM Customer_Data
WHERE first_name = "Frankie"
如果有一列符?SELECT 陈述式中的标准,则结果将昄如下Q?br />
customer_id     first_name
-------------    ------------
777              Frankie
UPDATE 陈述?br /> 

UPDATE 陈述式用来更新或改变一列或多列中的倹{例如,一位名UCؓ(f) Frankie Stein 的客h要在记录中改变他的姓氏ؓ(f) FranklinQ可使用以下 UPDATE 陈述式:(x)

UPDATE Customer_Data
SET first_name = "Franklin"
WHERE last_name = "Stein" and customer_id= 777
我们?WHERE 子句中加?customer_id 的项目来定其他名称?Stein 的客户不?x)被影响Q只有customer_id?77的客P姓氏?x)有所改变?br />
--------------------------------------------------------------------------------

说明

当?zhn)使?UPDATE 陈述式时Q要定?WHERE 子句提供充分的筛选条Ӟ如此才不?x)不l意地改变了(jin)一些不该改变的资料?br />

--------------------------------------------------------------------------------

DELETE 陈述?br /> 

DELETE 陈述式用来删除资料表中一列或多列的资料,(zhn)也可以删除资料表中的所有资料列。要?Customer_Data 资料表中删除所有的列,(zhn)可以利用下列陈q式Q?br />
DELETE FROM Customer_Data
?br />DELETE Customer_Data
资料表名U前?FROM 关键字在 DELETE 陈述式中是选择性的。除此之外,q两个陈q式完全相同?br />
要从 Customer_Data 资料表中删除 customer_id 资料行的值小?00的列Q可利用下列陈述式:(x)

DELETE FROM Customer_Data
WHERE customer_id &lt; 100
现在我们已经快速浏览了(jin) SQL 提供?DDL ?DML 陈述式,接著Q下面将介绍 T-SQL?br />
SQL中的五种数据cd  

要描qC下SQL中的五种数据cd:字符型,文本型,数值型Q逻辑型和日期?br />
字符?br />
VARCHAR VS CHAR

VARCHAR型和CHAR型数据的q个差别是细微的Q但是非帔R要。他们都是用来储存字W串长度于255的字W?br />
假如你向一个长度ؓ(f)四十个字W的VARCHAR型字D中输入数据BIll GAtES。当你以后从q个字段中取出此数据Ӟ你取出的数据光度ؓ(f)十个字符——字W串Bill Gates的长度?现在假如你把字符串输入一个长度ؓ(f)四十个字W的CHAR型字D中Q那么当你取出数据时Q所取出的数据长度将是四十个字符。字W串的后面会(x)被附加多余的I格?br />
当你建立自己的站Ҏ(gu)Q你?x)发C用VARCHAR型字D要比CHAR型字D|便的多。用VARCHAR型字D|Q你不需要ؓ(f)剪掉你数据中多余的空D操?j)?br />
VARCHAR型字D늚另一个突出的好处是它可以比CHAR型字D占用更的内存和硬盘空间。当你的数据库很大时Q这U内存和盘I间的节省会(x)变得非常重要

文本?br />
TEXT

使用文本型数据,你可以存放超q二十亿个字W的字符丌Ӏ当你需要存储大串的字符Ӟ应该使用文本型数据?br />
注意文本型数据没有长度,而上一节中所讲的字符型数据是有长度的。一个文本型字段中的数据通常要么为空Q要么很大?br />
当你从HTML fORM的多行文本编辑框(TEXTAREA)中收集数据时Q你应该把收集的信息存储于文本型字段中。但是,无论何时Q只要你能避免用文本型字段Q你应该不适用它。文本型字段既大且慢Q滥用文本型字段?x)服务器速度变慢。文本型字段q会(x)吃掉大量的磁盘空间?br />
一旦你向文本型字段中输入了(jin)M数据(甚至是空?Q就?x)?K的空间被自动分配l该数据。除非删除该记录Q否则你无法收回q部分存储空间?br />
数值型

SQL支持许多U不同的数值型数据。你可以存储整数 INT 、小?NUMERIC、和钱数 MONEY?br />
INT VS SMALLINT VS TINYINT

他们的区别只是字W长?

INT型数据的表数范围是从-2Q?47Q?83Q?47?Q?47Q?83Q?47的整?br />
SMALLINT 型数据可以存储从-32768?2768的整?br />
TINYINT 型的字段只能存储??55的整?不能用来储存负数

通常Qؓ(f)?jin)节省空_(d)应该可能的使用最的整型数据。一个TINYINT型数据只占用一个字?一个INT型数据占用四个字节。这看v来似乎差别不大,但是在比较大的表中,字节数的增长是很快的。另一斚wQ一旦你已经创徏?jin)一个字D,要修改它是很困难的。因此,为安全v见,你应该预以下,一个字D|需要存储的数值最大有可能是多大,然后选择适当的数据类型?br />
NUMERIC

Z(jin)能对字段所存放的数据有更多的控Ӟ你可以用NUMERIC型数据来同时表示一个数的整数部分和数部分。NUMERIC型数据你能表示非常大的数——比INT型数据要大得多。一个NUMERIC型字D可以存储从-1038?038范围内的数。NUMERIC型数据还使你能表C有数部分的数。例如,你可以在NUMERIC型字D中存储数3.14?br />
当定义一个NUMERIC型字D|Q你需要同时指定整数部分的大小和小数部分的大小。如:MUNERIC(23,0)

一?NUMERIC型数据的整数部分最大只能有28位,数部分的位数必d于或{于整数部分的位敎ͼ数部分可以是零?br />
MONEY VS SMALLMONEY

你可以?INT型或NUMERIC型数据来存储钱数。但是,专门有另外两U数据类型用于此目的。如果你希望你的|点能挣很多钱,你可以用MONEY型数据。如果你的野?j)不大,你可以用SMALLMONEY型数据。MONEY型数据可以存储从-922Q?37Q?03Q?85Q?77.5808?22Q?37Q?03Q?85Q?77.5807的钱数。如果你需要存储比q还大的金额Q你可以使用NUMERIC型数据?br />
SMALLMONEY型数据只能存储从-214Q?48.3648?14Q?48.3647 的钱数。同P如果可以的话Q你应该用SMALLMONEY型来代替MONEY型数据,以节省空间?br />
逻辑?br />
BIT

如果你用复选框( CHECKBOX)从网中搜集信息Q你可以把此信息存储在BIT型字D中。BIT型字D只能取两个?0??br />
当心(j)Q在你创建好一个表之后Q你不能向表中添?BIT型字Dc(din)如果你打算在一个表中包含BIT型字D,你必d创徏表时完成?br />
日期?br />
DATETIME VS SMALLDATETIME

一?DATETIME型的字段可以存储的日期范围是?753q??日第一毫秒?999q?2?1日最后一毫秒?br />
如果你不需要覆盖这么大范围的日期和旉Q你可以使用SMALLDATETIME型数据。它与DATETIME型数据同样用,只不q它能表C的日期和时间范围比DATETIME型数据小Q而且不如DATETIME型数据精。一个SMALLDATETIME型的字段能够存储?900q??日到2079q??日的日期Q它只能_到秒?br />
DATETIME型字D在你输入日期和旉之前q不包含实际的数据,认识q一Ҏ(gu)重要的?img src ="http://www.tkk7.com/jiabao/aggbug/191613.html" width = "1" height = "1" />

]]>
关于sql的执行计划(推荐详细Q?/title><link>http://www.tkk7.com/jiabao/archive/2008/04/08/191595.html</link><dc:creator>金家?/dc:creator><author>金家?/author><pubDate>Tue, 08 Apr 2008 15:38:00 GMT</pubDate><guid>http://www.tkk7.com/jiabao/archive/2008/04/08/191595.html</guid><wfw:comment>http://www.tkk7.com/jiabao/comments/191595.html</wfw:comment><comments>http://www.tkk7.com/jiabao/archive/2008/04/08/191595.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jiabao/comments/commentRss/191595.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jiabao/services/trackbacks/191595.html</trackback:ping><description><![CDATA[ <div style="FONT-SIZE: 14px; FONT-FAMILY: Verdana"> <p>刚开始用SQL Server的时候,我没有用<strong>昄执行计划</strong>来对查询q行分析。我曄一直认为我递交的SQL查询都是最优的Q而忽略了(jin)查询性能I竟如何Q从而对“执行计划”重视不够。在我职业初期,我只要能获取数据很开?j),而不去考虑数据是如何返回的Q“执行计划”对我的查询作了(jin)什么工作。我以ؓ(f)SQL Server?x)自己去处理查询的性能问题的。作Z个刚q入IT行业或者刚学到新技术的软g工程师,在编写代码前不太可能有时间去学习(fn)其实必须掌握的知识。也许这是因为IT行业竞争太激烈的~故?</p> <p>随着旉的流逝,数据库容量慢慢变大了(jin)。终于某天,客户对应用系l的查询性能感到不满意了(jin)。他面带怒容来找我,抱怨由于查询太慢,使得他需要花更多的时间来处理公务。最初,我徏议客户升U其pȝ资源Q例如作Z(f)时解x案,增加盘定w。虽然硬盘h(hun)格现在很便宜?jin),但是客户q是要求我提供一个永久性的解决Ҏ(gu)Q检查和好好调试查询语句Q来替代那种无休止地升资源的(f)时方案。因为客L(fng)满意度对IT行业来说是十分重要的Q因此我不得不考虑他的个h。我{应他一定会(x)(g)查和调整我的代码?</p> </div> <br /> <div style="FONT-WEIGHT: bold; FONT-SIZE: 16px; COLOR: #446996; FONT-FAMILY: bookman old style"> <p>如何入手?</p> </div> <div style="FONT-SIZE: 14px; FONT-FAMILY: Verdana"> <p>在刚q入IT行业Ӟ我知道SQL Server的基只是。说实话Q向客户承诺(g)查系l的时候,我还没有一点入手的头A。不q我怿我可以通过GOOGL和BOL来获取相应的信息?</p> <p>我阅M(jin)一些关于SQL Server的书c,BOLQ以?qing)在|上搜烦(ch)的信息。于是我知道?jin)“显C执行计划”的概念。可以在查询理器中该选项的开兌|ؓ(f)ON。“显C执行计划”是一个图形化工具Q可以帮助开发者和DBA分析Q优化查询,从而改善性能?</p> <p>“显C执行计划”中不同的Q务具有不同的图标。本文中我主要对“Table Scan”、“Index Scan”、“Index Seek”、“Cluster Index Scan”以?qing)“Clustered Index Seek”感兴趣。也许在以后Q可以对别的dq行另外介绍?</p> <p>旉以F1方程式的速度开始流逝,我觉得该是我全面理解“Table Scan”、“Index Scan”、“Index Seek”、“Clustered Index Scan”、和“Clustered Index Seek”如何工作的时候了(jin)?</p> <p>我准备开始分析ƈ优化我的查询。在分析之前Q我惛_?jin)一些问题?</p> <p> <strong> </strong> </p> <ul> <li> <strong>MS-SQL Server什么时候?Table Scan"? </strong> </li> <li> <strong>MS-SQL Server什么时候?Index Scan"? </strong> </li> <li> <strong>MS-SQL Server什么时候?Index Seek"? </strong> </li> <li> <strong>MS-SQL Server什么时候?Clustered Index Scan"? </strong> </li> <li> <strong>MS-SQL Server什么时候?Clustered Index Seek"? </strong> </li> </ul> <p> </p> <p>我主要关注SQL Server是根据什么来使用“执行计划”分析查询的。在l过一D|间学?fn)后Q我?jin)解了(jin)一些相关知识。这些知识应该对开发和DBA新手有帮助。于是我军_写这文章,׃n我的知识以帮助别人来理解“执行计划”?</p> <p>如果你喜Ƣ,可以慢慢dQ也可以在SQL Server上,模拟我下面做的实验?</p> </div> <br /> <div style="FONT-WEIGHT: bold; FONT-SIZE: 16px; COLOR: #446996; FONT-FAMILY: bookman old style"> <p>开始入?/p> </div> <div style="FONT-SIZE: 14px; FONT-FAMILY: Verdana"> <p>Z(jin)解释“显C执行计划”中的“Table Scan”、“Index Scan”、“Index Seek”、“Clustered Index Scan”和“Clustered Index Seek”,先创建新表,q添加一些示例数据进厅R下面是创徏新表的脚本:(x) </p> <p> </p> <table style="TABLE-LAYOUT: fixed; BACKGROUND-COLOR: #f9f9f9" cellspacing="5" width="90%"> <tbody> <tr> <td> <p style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">Create Table PerformanceIssue<br />(<br />    PRID UniqueIdentifier NOT NULL,<br />    PRCode Int NOT NULL,<br />    PRDesc Varchar (100) NOT NULL<br />)<br />ON [PRIMARY]<br /></p> </td> </tr> </tbody> </table> <p> </p> <p>表创建后需要添加一些数据。用下面的脚本d100,000条记录进厅R脚本执行时间可能比较长Q请耐心(j){待其执行完毕?</p> <p> </p> <table style="TABLE-LAYOUT: fixed; BACKGROUND-COLOR: #f9f9f9" cellspacing="5" width="90%"> <tbody> <tr> <td> <p style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">Declare @Loop Int<br />Declare @PRID UniqueIdentifier<br />Declare @ PRDesc Varchar (100)<br /><br />Set @Loop = 1<br />Set @ PRDesc = ''<br /><br />WHILE @Loop <= 100000<br />BEGIN<br />   Set @PRID = NewID()<br />   Set @PRDesc = ' PerformanceIssue - ' + Convert( Varchar(10),@Loop )<br />   Insert Into PerformanceIssue Values (@PRID, @Loop, @PRDesc)<br />   Set @Loop = @Loop + 1<br />END<br /></p> </td> </tr> </tbody> </table> <p> </p> <p>脚本成功执行后,数据添加进M(jin)?</p> <p>用下面语句来看一下表的内容:(x) </p> <p> </p> <table style="TABLE-LAYOUT: fixed; BACKGROUND-COLOR: #f9f9f9" cellspacing="5" width="90%"> <tbody> <tr> <td> <p style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">Select PRID, PRCode, PRDesc<br />From PerformanceIssue<br />GO<br /></p> </td> </tr> </tbody> </table> <p> </p> <p>׃记录较长Q因此这里就不列出查询结果了(jin)?</p> <p>正如我前面讲刎ͼ我想解释何时?x)有“Table Scan”、“Index Scan”、“Index Seek”、“Clustered Index Scan”和“Clustered Index Seek”。上q哪个会(x)改善性能呢? </p> <p>当SQL Serverq回数据Ӟ我们想知道SQL Server采取何种扫描机制来协助获取数据。首先看一下“Table Scan”。我们想?jin)解什么时候“Table Scan”会(x)产生?</p> <p>选择“显C执行计划”或者用热键“Alt + Q”来ȀzZ显C执行计划”,当然也可以用快捷键“Ctrl+K”?</p> <p>看一下执行下面查询后的“执行计划”结果?</p> <p> </p> <table style="TABLE-LAYOUT: fixed; BACKGROUND-COLOR: #f9f9f9" cellspacing="5" width="90%"> <tbody> <tr> <td> <p style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">Select PRID, PRCode, PRDesc <br />From PerformanceIssue<br />GO<br /></p> </td> </tr> </tbody> </table> <p> <img alt="" src="http://storage.msn.com/x1pKouN4nZmbX1GXt4PK3fT0r--wpY720dGZZbuMFWxNVrcS7Azc5Z2Ma0GIGoBAgH_VqKpZloe1E5kAOwpXw2b0xPrUxY9q5TbxrPEWtnJhs5rWpDwZYvAxDnEvC9HFuPFPyPvggmk8vp_5r-tOn27YQ" /> <br /> </p> <p>上面的“执行计划”中QSQL Server用到?jin)“Table Scan”。我问自׃ؓ(f)什么会(x)有“Table Scan”,SQL Server是根据什么来使用该方法的。难道是因ؓ(f)我想获取所?00,000条记录吗Q于是我换了(jin)一个角度进行思考,如果来避免查询中出现“Table Scan”呢Q此时我对SQL Server的扫描机制还不是很清楚,那么该如何优化查询呢Q下面的SELECT查询中仅选择两列Q[PRID, PRCode]?</p> <p> </p> <table style="TABLE-LAYOUT: fixed; BACKGROUND-COLOR: #f9f9f9" cellspacing="5" width="90%"> <tbody> <tr> <td> <p style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">Select PRID, PRCode<br />From PerformanceIssue<br />GO<br /></p> </td> </tr> </tbody> </table> <p> <img alt="" src="http://storage.msn.com/x1pCFuELfk4HG5HGNGsDSLDPMiFz7i0uCmiijlNOrj8gIv1Jn5k1ECnTvpigni4OUlBNAWuBUFCPZAB6cBi4xpqHixRnmu0RxT_OdKiVZ94_BTbfEcTcf0Cj_xvcLIPtdPa" /> <br /> </p> <p>查询执行后,执行计划和第一个查询一栗于是将查询改变为只(g)索一个字D?[PRID]?</p> <p> </p> <table style="TABLE-LAYOUT: fixed; BACKGROUND-COLOR: #f9f9f9" cellspacing="5" width="90%"> <tbody> <tr> <td> <p style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">Select PRID <br />From PerformanceIssue<br /><br />GO<br /></p> </td> </tr> </tbody> </table> <p> <img alt="" src="http://storage.msn.com/x1pCFuELfk4HG5HGNGsDSLDPLG-5aH8sL29Nxtz7K-3BABZY54v5W9CkiCQDzg-pkTI_dM6OYrV6xnsm8upiR4nCXrEi4k0GdoIMap0KlqDqxeU2tKhRtBpEabPojERmq23t2qSZ3oi2Z4" /> <br /> </p> <p>查询执行后,执行计划仍然和第一个查询的相同。对“Estimated row size”属性不需要太大关注。意思我立刻军_只获取一条记录,看看执行计划?x)如何。查询语句如下:(x) </p> <p> </p> <table style="TABLE-LAYOUT: fixed; BACKGROUND-COLOR: #f9f9f9" cellspacing="5" width="90%"> <tbody> <tr> <td> <p style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">Select PRID, PRCode, PRDesc <br />From PerformanceIssue<br />Where PRID = 'D386C151-5F74-4C2A-B527-86FEF9712955'<br />-- PRID GUID value might be differ in your machine<br /><br />GO<br /></p> </td> </tr> </tbody> </table> <p> </p> <p>执行完成后,执行计划昄Q?<img alt="" src="http://storage.msn.com/x1pCFuELfk4HG5HGNGsDSLDPOfXsUydrD1C1FSVJ6aeQ2FeoSCMyxjjeZ2ibnviincCMjPr41clDfQ3X8TkLgbHRl1-c7F8wV37bVHAyi28g0Yl5b8rPOqqWNPsaJY5_D7gYsHQ04xSOsI" /><br /></p> <p>查询仍然使用?jin)“Table Scan”方法来昄数据?</p> <p>那么Q我需要想其它办法来避免“Table Scan”。首先我惛_应该l表加上索引。于是我在PRID字段上创建非聚集索引。添加了(jin)索引后是否就能避免“Table Scan”?下面我们开始讨论关于“Index Scan”和“Index Seek”的主题?</p> </div> <br /> <div style="FONT-WEIGHT: bold; FONT-SIZE: 16px; COLOR: #446996; FONT-FAMILY: bookman old style"> <p>Index Scan ?Index Seek</p> </div> <div style="FONT-SIZE: 14px; FONT-FAMILY: Verdana"> <p>首先在PRID字段上创建非聚集索引?</p> <p> </p> <table style="TABLE-LAYOUT: fixed; BACKGROUND-COLOR: #f9f9f9" cellspacing="5" width="90%"> <tbody> <tr> <td> <p style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">CREATE UNIQUE NONCLUSTERED INDEX UNC_PRID<br />ON PerformanceIssue (PRID)<br />GO<br /></p> </td> </tr> </tbody> </table> <p> </p> <p>本文假定读者已l知道非聚集索引如何工作的知识。了(jin)解非聚集索引更详l的信息Q请阅读BOL相关主题Q也可参?<a style="COLOR: #3366bb; TEXT-DECORATION: underline" >http://www.sql-server-performance.com/gv_index_data_structures.asp</a>。下面我们详l讲q“Index Scan”是如何工作的?</p> <p>执行下面语句q查看执行计划的l果?</p> <p> </p> <table style="TABLE-LAYOUT: fixed; BACKGROUND-COLOR: #f9f9f9" cellspacing="5" width="90%"> <tbody> <tr> <td> <p style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">Select PRID, PRCode, PRDesc <br />From PerformanceIssue<br />GO<br /></p> </td> </tr> </tbody> </table> <p> <img alt="" src="http://storage.msn.com/x1pCFuELfk4HG5HGNGsDSLDPCoCUSPrQg4fD3JME0db5bK42R_-O_qPCDpxa9F_Wx8V7AzVqxecLV4rvW3JYtIJnhaGuxeRJgWEGQ4BWf6mfeGstgsBiVi8ZZWwGQlj1VSWBYXSfW3AfD4" /> <br /> </p> <p>奇怪了(jin)Q“Table Scan”仍然用C(jin)。ؓ(f)什么SQL Server没有用到那个非聚集烦(ch)引?于是l箋优化查询语句Q选择(g)索两个字D?[PRID, PRCode] ?</p> <p> </p> <table style="TABLE-LAYOUT: fixed; BACKGROUND-COLOR: #f9f9f9" cellspacing="5" width="90%"> <tbody> <tr> <td> <p style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">Select PRID, PRCode From PerformanceIssue<br />GO<br /></p> </td> </tr> </tbody> </table> <p> <img alt="" src="http://storage.msn.com/x1pCFuELfk4HG5HGNGsDSLDPEgaLvZUGAukYKLci89vCemcX0tv_nMs9zfHFziEHW5c4Pe_mlIGnL4I4QK4DwYBtdxup-gCVclZrjdOk8UOJOolFxuASIqi5WNj215kc3gk_bQdGCxi5os" /> <br /> </p> <p>执行l果是和上一个查询结果一怸栗于是修Ҏ(gu)询ؓ(f)只检索一个字D?[PRID] ?</p> <p> </p> <table style="TABLE-LAYOUT: fixed; BACKGROUND-COLOR: #f9f9f9" cellspacing="5" width="90%"> <tbody> <tr> <td> <p style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">Select PRID <br />From PerformanceIssue<br />GO<br /></p> </td> </tr> </tbody> </table> <p> </p> <p>执行计划l果如下Q?<img alt="" src="http://storage.msn.com/x1pCFuELfk4HG5HGNGsDSLDPECpnrZ_vTjwQLkWlcxZPRjQ_pkWpHfwKytCF6eyAt8idnUVN8T9fSi-XWb8trmi_anBAWbVGuFLzQ7UB1h9zymdvaWrMM1_BMsmE7IamGEn" /><br /></p> <p>“Index Scan”在查询中被用到?jin),q很好。很自然Q接下来的问题就是“Index Scan”什么时候会(x)被用到。字DPRID上有一个烦(ch)引,查询语句中选中的字Dؓ(f)PRID。执行查询的时候,SQL Server扫描索引,因此用到?jin)“Index Scan”方法。前面的查询中选择?jin)有索引的和没有索引的字D,SQL Server无法使用“Index Scan”。当查询中只选择有烦(ch)引的字段ӞSQL Server׃用了(jin)“Index Scan”。我不清楚SQL Server底层到底是如何判断的Q不q通过q些试验Q我认ؓ(f)<strong>当查询中只选择有烦(ch)引的字段ӞSQL Server׃用“Index Scan”方?/strong>?</p> <p>下面看“Index Seek”方法何时生。当我看到“Seek”这个词ӞW一反应是条g查询q个L?</p> <p>我尝试三U不同的带WHERE语法的查询语句,以找出那U会(x)用“Index Seek”。第一U语句如下:(x) </p> <p> </p> <table style="TABLE-LAYOUT: fixed; BACKGROUND-COLOR: #f9f9f9" cellspacing="5" width="90%"> <tbody> <tr> <td> <p style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">Select PRID, PRCode, PRDesc <br />From PerformanceIssue<br />Where PRCode = 8<br />GO<br /></p> </td> </tr> </tbody> </table> <p> </p> <p>l果昄Q执行计划用了(jin)“Table Scan”?<img alt="" src="http://storage.msn.com/x1pCFuELfk4HG5HGNGsDSLDPO7xKCivdj-jOyVcx2aDCGldX24PlZGmjJwz2GE-4i0s4O7zu-YfhsWheDF56FahtCW0eUtJYMU95V4Q90B1pb12nBygJRHdZDlpoqvg4v-4yJeINu58bSE" /><br /></p> <p>W二U语句如下:(x) </p> <p> </p> <table style="TABLE-LAYOUT: fixed; BACKGROUND-COLOR: #f9f9f9" cellspacing="5" width="90%"> <tbody> <tr> <td> <p style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">Select PRID, PRCode, PRDesc<br />From PerformanceIssue<br />Where PRDesc = ' PerformanceIssue - 8'<br />GO<br /></p> </td> </tr> </tbody> </table> <p> </p> <p>执行计划仍然使用“Table Scan”方法?<img alt="" src="http://storage.msn.com/x1pCFuELfk4HG5HGNGsDSLDPAzaPv7d-XVFQyIwu1Xcw77VlXeFlCcHdrfA-HIArHnVYfktaE2dvhFwRWD1DJwQypJCzjWQ_3VpH0shc6AaSDoHBAvRd2xDgxpkieOsp5lLj04NctGY_pk" /><br /></p> <p>W三U查询语句如下:(x) </p> <p> </p> <table style="TABLE-LAYOUT: fixed; BACKGROUND-COLOR: #f9f9f9" cellspacing="5" width="90%"> <tbody> <tr> <td> <p style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">Select PRID, PRCode, PRDesc<br />From PerformanceIssue <br />Where PRID = 'D386C151-5F74-4C2A-B527-86FEF9712955'<br /><br />-- PRID GUID value might be differ in your machine<br />GO<br /></p> </td> </tr> </tbody> </table> <p> <img alt="" src="http://storage.msn.com/x1pKouN4nZmbX1GXt4PK3fT0r--wpY720dGZZbuMFWxNVqxYdUionwLHWHD8vUHVSjWgvg7oO9T287kDJqT9O9n_zoynukEc0ECt2JJrnqCr-kzV-Msh0LL4SOsoOKRsJipLJO6h42nAPAcmAntW8MY8A" /> <br /> <img alt="" src="http://storage.msn.com/x1pKouN4nZmbX1GXt4PK3fT0r--wpY720dGZZbuMFWxNVrrQxklltiGyTf5BxTGBESvgNvahm7UNkT3lojLP4dwT0XnA3SJY9gcTjUnYAXjZiJGmV4aq4yKlqA6oC7kvp9OaJt2-m4yW7Xl8C6bclil3g" /> <br /> </p> <p>查询用到?jin)“Index Seek”和“Bookmark Lookup”方法。用到“Index Seek”是因ؓ(f)WHERE后面使用带烦(ch)引的字段PRID来进行过滤。“Bookmark Lookup”方法被用到是因为查询中选择?jin)没有?ch)引的字段。如果去掉这两个没有索引的字D,那么“Bookmark Lookup”方法就可以L。当然如果只q回PRID字段Q那么该查询没什么意义了(jin)Q因为WHERE语句后面已经l出PRID具体取g(jin)?</p> <p>我认为“Index Seek”在性能改善上比“Index Scan”和“Table Scan”要好,q主要表现在下面几个斚wQ?</p> <p> </p> <ol> <li>“Index Seek”不需要对表和索引进行扫描;而“Table Scan”和“Index Scan”需要? </li> <li>“Index Seek”利用“WHERE”来qo(h)获取的数据,q样比用“Index Scan”和“Table Scan”快很多?</li> </ol> <p> </p> <p>当我完成q些试后,我同事问我一个很有意思的问题QSQL Server什么时候用“Clustered Index Scan”和“Clustered Index Seek”?下面对“Clustered Index Scan”和“Clustered Index Seek”进行实验?</p> <p>我决定在PRCode上徏一个聚集烦(ch)引来试“Clustered Index Scan”和“Clustered Index Seek”?</p> </div> <br /> <div style="FONT-WEIGHT: bold; FONT-SIZE: 16px; COLOR: #446996; FONT-FAMILY: bookman old style"> <p>Clustered Index Scan & Clustered Index Seek</p> </div> <div style="FONT-SIZE: 14px; FONT-FAMILY: Verdana"> <p>下面的脚本删除PRID字段上的索引Qƈ在PRCode字段上创集烦(ch)引?</p> <p> </p> <table style="TABLE-LAYOUT: fixed; BACKGROUND-COLOR: #f9f9f9" cellspacing="5" width="90%"> <tbody> <tr> <td> <p style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">Drop Index PerformanceIssue.UNC_PRID<br />GO<br />CREATE UNIQUE CLUSTERED INDEX UC_PRCode<br />ON PerformanceIssue( PRCode)<br />GO<br />-------------<br />Clustered index has been created successfully. <br />Index has been created. <br /></p> </td> </tr> </tbody> </table> <p> </p> <p>关于聚集索引的基知识h阅联机帮助的相关主题或?<a style="COLOR: #3366bb; TEXT-DECORATION: underline" >http://www.sql-server-performance.com/gv_index_data_structures.asp</a>。下面我们将重点攑֜“Clustered Index Scan”和“Clustered Index Seek”如何被使用上?</p> <p>执行下面查询语句Q?</p> <p> </p> <table style="TABLE-LAYOUT: fixed; BACKGROUND-COLOR: #f9f9f9" cellspacing="5" width="90%"> <tbody> <tr> <td> <p style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">Select PRID, PRCode, PRDesc <br />From PerformanceIssue<br />GO<br /></p> </td> </tr> </tbody> </table> <p> </p> <p>查询执行后,可以看到执行计划中用C(jin)“Clustered Index Scan”?<img alt="" src="http://storage.msn.com/x1pKouN4nZmbX1GXt4PK3fT0r--wpY720dGZZbuMFWxNVo8iwWBhKv4u5Sw1FAP_nQFRvmIeGcndLdC-ra--h7xXWPh8A5OG9q4AG_d-4pfEAy-9r2u4zjDBRcqIcfW9GeNn-S6YGgTgEA2Hv5k2KjSlw" /><br /></p> <p>下面用三U不同的WHERE方式来试验何时SQL Server?x)用到“Clustered Index Seek”。第一UŞ式如下:(x) </p> <p> </p> <table style="TABLE-LAYOUT: fixed; BACKGROUND-COLOR: #f9f9f9" cellspacing="5" width="90%"> <tbody> <tr> <td> <p style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">Select PRID, PRCode, PRDesc <br />From PerformanceIssue<br />Where PRDesc = ' PerformanceIssue - 8'<br />GO<br /></p> </td> </tr> </tbody> </table> <p> </p> <p>查询执行后,可以看到执行计划中用C(jin)“Clustered Index Scan”?<img alt="" src="http://storage.msn.com/x1pKouN4nZmbX1GXt4PK3fT0r--wpY720dGZZbuMFWxNVovLmEmg5zIv3glKD8cPzNVSM8-OpJnfYtBniwcDxQ22y9huT4t8lQIqUDmbcV8AWAUXcaHRjPQ2mwBSrYYAt-sAHtumbjAXVPp46hrH6UMAg" /><br /></p> <p>W二UŞ式如下:(x) </p> <p> </p> <table style="TABLE-LAYOUT: fixed; BACKGROUND-COLOR: #f9f9f9" cellspacing="5" width="90%"> <tbody> <tr> <td> <p style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">Select PRID, PRCode, PRDesc <br />From PerformanceIssue<br />Where PRID = 'D386C151-5F74-4C2A-B527-86FEF9712955'<br /><br />-- PRID GUID value might be differ in your machine<br />GO<br /></p> </td> </tr> </tbody> </table> <p> </p> <p>查询执行后,发现执行计划中用到的仍然是“Clustered Index Scan”?<img alt="" src="http://storage.msn.com/x1pCFuELfk4HG5HGNGsDSLDPP60MRclO6irF7ZHVVGC0exOPjcE6CsADIh4AfOA7Z5XgryTWLkLYmQWO0njMvGzvQOftUkf2Z76W5YHo4bCnkoF9rHU9SG5YYnNlvBI77-e" /><br /></p> <p>W三UŞ式:(x) </p> <p> </p> <table style="TABLE-LAYOUT: fixed; BACKGROUND-COLOR: #f9f9f9" cellspacing="5" width="90%"> <tbody> <tr> <td> <p style="FONT-SIZE: 14px; FONT-FAMILY: Verdana">Select PRID, PRCode, PRDesc <br />From PerformanceIssue<br />Where PRCode = 8<br />GO<br /></p> </td> </tr> </tbody> </table> <p> </p> <p>q次执行计划用到?jin)“Clustered Index Seek”?<img alt="" src="http://storage.msn.com/x1pCFuELfk4HG5HGNGsDSLDPMFx5_Sy-R7OUDGT7WugYZScvUGO7EaJjirFPcXZSIrUHP-cJjwj8Vpk9z2A956NMIr5RBpIkXgUCpniZoAXdOMvxe6-o_Ymp9pr02gkthJMaRtjjpg6Fqk" /><br /></p> <p>当在WHERE后用到PRCode字段的时候,“Clustered Index Seek”被用到。执行计划对聚集索引表检索的时候,因ؓ(f)在选取的字D中Q包括没有烦(ch)引的字段Q所以不用用到“Bookmark Lookup”方法?</p> <p>我个为,从改善性能角度考虑Q“Clustered Index Seek”比“Clustered Index Scan”和“Index Seek”要好?</p> <p> </p> <ol> <li>“Clustered Index Seek”不需要扫描整个聚集烦(ch)引页? </li> <li>和“Index Scan”相比,对于(g)索选择的字D包含那些没有烦(ch)引的字段Ӟ“Clustered Index Seek”不?x)有“Bookmark Lookup”方法出现?</li> </ol> <p> </p> <p>通过q些试验Q我Ҏ(gu)行计划的应用U篏?jin)实际经验。我知道哪种扫描机制可以提高性能Q从而是的客h意?/p> <p> </p> </div> <img src ="http://www.tkk7.com/jiabao/aggbug/191595.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jiabao/" target="_blank">金家?/a> 2008-04-08 23:38 <a href="http://www.tkk7.com/jiabao/archive/2008/04/08/191595.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://aaaaa123.com" target="_blank">պƷѹۿ</a>| <a href="http://maiertejx.com" target="_blank">޹ƷAAAƬ</a>| <a href="http://6ork.com" target="_blank">91ѹƷ</a>| <a href="http://by4471.com" target="_blank">Ƶ߹ۿѲӰԺ</a>| <a href="http://youyou8tv.com" target="_blank">þŮƷƷ</a>| <a href="http://8099456.com" target="_blank">߲Ƶ</a>| <a href="http://zgj688.com" target="_blank">˳ɵӰվ</a>| <a href="http://qsqse1.com" target="_blank">ŷ˳</a>| <a href="http://bdgxhome.com" target="_blank">߹ۿѹۿ </a>| <a href="http://kanzhelu23.com" target="_blank">һػaѴƬ</a>| <a href="http://my533.com" target="_blank">ŷ޹ۺAVþ</a>| <a href="http://ekyzs.com" target="_blank">AVר4SE </a>| <a href="http://0551dfcy.com" target="_blank">޾ƷŮ2020þ</a>| <a href="http://2266511.com" target="_blank">޹</a>| <a href="http://155562.com" target="_blank">þþþ޾Ʒ</a>| <a href="http://se988.com" target="_blank">ޱ龫Ʒһ</a>| <a href="http://bjyaao.com" target="_blank">߿Ƭa</a>| <a href="http://527352.com" target="_blank">һ2342021ѹۿ һ234޿Ƶ </a>| <a href="http://www-15706.com" target="_blank">ҹѹѵ</a>| <a href="http://79909d.com" target="_blank">һ</a>| <a href="http://449892.com" target="_blank">videos</a>| <a href="http://caicpa.com" target="_blank">޳a˲߹ۿ</a>| <a href="http://alankell.com" target="_blank">޳˾Ʒþ</a>| <a href="http://dddd20.com" target="_blank">޿Ļ</a>| <a href="http://0730jxpm.com" target="_blank">޾þþþþ77777</a>| <a href="http://dwj28.com" target="_blank">ĻþƷѹۿ</a>| <a href="http://k9l4.com" target="_blank">Ļó</a>| <a href="http://12345ww.com" target="_blank">ĻӰԺѹۿ</a>| <a href="http://www026qqcom.com" target="_blank">ҹѸ</a>| <a href="http://yongfu-sh.com" target="_blank">ɫwwwƵ</a>| <a href="http://6006769.com" target="_blank">ձ˳Ƶ</a>| <a href="http://obtainfo.com" target="_blank">AVƬ߲</a>| <a href="http://732r.com" target="_blank">AëƬڵ</a>| <a href="http://rushiruhua.com" target="_blank">97Ƶ</a>| <a href="http://aaaaa123.com" target="_blank">1000žžʮδֹۿ</a>| <a href="http://nxjyyj.com" target="_blank">һƵ</a>| <a href="http://kppp4.com" target="_blank">þûɫվ</a>| <a href="http://7t53.com" target="_blank">Ʒһ </a>| <a href="http://8v4y.com" target="_blank">ҹAVëƬþ</a>| <a href="http://ziguang1688.com" target="_blank">޾Ʒվ߹ۿ޹</a>| <a href="http://am33318.com" target="_blank">AV˳ۺ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>