- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
sql,server,清除执行计划
【如何使用SQLServer执行计划】 【看懂SQLServer执行计划】 【SQLServer执行计划各个动作含义】 【理解SQLServer执行计划的意思】 要理解执行计划,怎么也得先理解,那各种各样的名词吧。鉴于自己还不是很了解。本文打算作为只写懂的,不懂的懂了才写。 在开头要先说明,第一次看执行计划要注意,SQLServer的执行计划是从右向左看的。名词解析: 扫描:逐行遍历数据。 先建立一张表,并给大家看看大概是什么样子的。 CREATETABLEPerson( IdintIDENTITY(1,1)NOTNULL, Namenvarchar(50)NULL, AgeintNULL, HeightintNULL, Areanvarchar(50)NULL, MarryHistorynvarchar(10)NULL, EducationalBackgroundnvarchar(10)NULL, Addressnvarchar(50)NULL, InSiteIdintNULL )ON[PRIMARY] 表中的数据14万左右,大概类似下面这样: 此表,暂时没有任何索引。 一、数据访问操作 1、表扫描 表扫描:发生于堆表,并且没有可用的索引可用时,会发生表扫描,表示整个表扫描一次。现在,我们来对此表执行一条简单的查询语句: SELECT*FromPersonWHEREName=公子 查看执行计划如下: 表扫描,顾名思义就是整张表扫描,找到你所需要的数据了。 2、聚集索引扫描 聚集索引扫描:发生于聚集表,也相当于全表扫描操作,但在针对聚集列的条件如(WHEREId 10)等操作时,效率会较好。 下面我们在Id列来对此表加上一个聚集索引 CREATECLUSTEREDINDEXIX_IdONPerson(Id) 再次执行同样的查询语句: SELECT*FromPersonWHEREName=公子 执行计划如下: 为什么建的聚集索引在Id列,会对扫描有影响呢?更何况与Name条件也没关系啊? 其实,你加了聚集索引之后,表就由堆表变成了聚集表。我们知道聚集表的数据存在于聚集索引的叶级节点。因此,聚集扫描与表扫描其实差别不大,要说差别大,也得看where条件里是什么,以后返回的数据。就本条SQL语句而言,效率差别并不大。 可以看看I/O统计信息: 表扫描: 聚集索引扫描: 此处超出本文范畴了,效率不在本文考虑范围内,本文只考虑的是,各种扫描的区别,以及为何会产生。 3、聚集索引查找 聚集索引查找:扫描聚集索引中特定范围的行。 看执行以下SQL语句: SELECT*FROMPersonWHEREId=73164 执行计划如下: 4、索引扫描 索引扫描:整体扫描非聚集索引。 下面我们来添加一个聚集索引,并执行一条查询语句: CREATENONCLUSTEREDINDEXIX_NameONPerson(Name)--创建非聚集索引 SELECTNameFROMPerson 查看执行计划如下: 为什么此处会选择索引扫描(非聚集索引)呢?因为此非聚集索引能够覆盖所需要的数据。如果非聚集索引不能覆盖呢?例如,我们将SELECT改为SELECT*再来看看。 好明显,返回结果所包括的记录太多,用非聚集索引反而不合算。因此使用了聚集索引。如果此时我们删除聚集索引,再执行SELECT*看看。 DROPINDEX_Id 而此时没有聚集索引,所以只有使用表扫描。5、书签查找 前面关于索引的学习我们已经知道,当在非聚集索引中并非覆盖和包含所需全部的列时,SQLServer会选择,直接进行聚集索引扫描获得数据,还是先去非聚集索引找到聚集索引键,然后利用聚集索引找到数据。 下面来看一个书签查找的示例: SELECT*FROMPersonWHEREName=胖胖--Name列有非聚集索引 执行计划如下: 上面的过程可以理解为:首先通过非聚集索引找到所求的行,但这个索引并不包含所有的列,因此还要额外去基本表中找到这些列,因此要进行键查找,如果基本表是以堆进行组织的,那么这个键查找(KeyLookup)就会变成RID查找(RIDLookup),键查找和RID查找统称为书签查找。不过有时当非聚集索引返回的行数过多时,SQLServer可能会选择直接进行聚集索引扫描了。 ?TableScan(表扫描):如果看到这个信息,就说明数据表上没有聚集索引,或者查询优化器 没有使用索引来查找。意即资
您可能关注的文档
最近下载
- 第1课 我是小学生啦(课件)心理健康一年级上册(鲁教版).pptx VIP
- 2022年全国新高考II数学试卷真题深度解读及答案详解.pdf VIP
- 医生高级职称晋升工作量证明.docx VIP
- 离婚协议书范文下载(可打印直接用).docx VIP
- 《熔炼与铸锭》课件.ppt VIP
- 《红星照耀中国》7—12章分章分节练习及答案.doc VIP
- 流程管理-中石化存货管理业务流程.pdf VIP
- (完整版)铸造熔炼炉安全检查表.docx VIP
- 2023-2024学年江苏省苏州市姑苏区胥江实验中学初一(上)第一次月考数学试题及答案.pdf VIP
- 电外科安全使用指南(2025版)的解读与实践PPT课件.pptx VIP
文档评论(0)