LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

sqlserver 执行计划

freeflydom
2023年7月26日 8:49 本文热度 408

官方文档


想复杂的事情简单说,在看执行计划的其他文章的时候,发现直接上很复杂的DDL脚本来讲解,这样子可能打开就没有兴趣往下看了。所以这里用了一个最简单的select语句进行说明引新入门。


打开

注意这三个【L型图标】,可以把鼠标移动到按钮上方可以显示【解释文字】。


图中从左到右分别为【显示估计的执行计划】【包括实际的执行计划】【包括实时查询统计信息】。


【显示估计的执行计划】是执行某个DDL的估计值。


【包括实际的执行计划】【包括实时查询统计信息】都是执行实际的值,所以你选择后,它会在下次执行后出执行结果。


 




结果分析

这是一个简单的查询,鼠标点击图片中的图片或线上都有惊喜(大量细节信息展示)。执行计划可以通过“另存”操作将某一次结果保留下来,方便与日后进行结果对比。


除了图标外,线的粗细代表涉及到的数据量的大小,越粗代表数据量越大。


 




执行计划元素列表如下:

 


执行计划元素列表解释请参考:

Graphical execution Plan Icons (SQL Server Management Studio)

看懂SQL Server执行计划



结果细节图

 

   





其中,第三个图中的属性Ordered是与order by相关。如下面两个脚本:


select * from vvtest order by id;

select * from vvtest

两个执行计划的结果如下:


  




 


所谓数据访问就是直接访问数据,可以是访问一个表也可以是访问一个索引。


通常有两种方法:一种是扫描(scan)一种是查找(seek)。


scan就是读取整个结构,可以访问一个heap或者一个clustered索引或者一个non-clustered索引。

seek不会读取整个结构,他则是更高效地通过索引访问一行,所以从这个角度来看,查找就只能应用在索引上面了。简单总结如下表所示:

首先分析最右边的Table Scan。这是sqlserver 查询数据的方法。sqlserver 数据查询方式一共有五种:


1. 【Table Scan】:遍历整个表,查找所有匹配的记录行。这个操作将会一行一行的检查,当然,效率也是最差的。

2. 【Index Scan】:根据索引,从表中过滤出来一部分记录,再查找所有匹配的记录行,显然比第一种方式的查找范围要小,因此比【Table Scan】要快。

3. 【Index Seek】:根据索引,定位(获取)记录的存放位置,然后取得记录,因此,比起前二种方式会更快。

4. 【Clustered Index Scan】:和【Table Scan】一样。注意:不要以为这里有个Index,就认为不一样了。 其实它的意思是说:按聚集索引来逐行扫描每一行记录,因为记录就是按聚集索引来顺序存放的。 而【Table Scan】只是说:要扫描的表没有聚集索引而已,因此这二个操作本质上也是一样的。

5. 【Clustered Index Seek】:直接根据聚集索引获取记录,最快!


所以总体来讲,在查询结果集是相同数量的情况下,查询速度排序为5>3>2>4>1。


一般而言,在性化时可以看到执行记录时是不是【Table Scan】或者【Clustered Index Scan】,如果是,可以通过增加或修改索引类型进行效率上的对比。


Lookup类型


Bookmark Lookup、RID Lookup、Key Lookup。


Bookmark Lookup和Key Lookup是一个意思,等价。


如果表没有创建聚集索引则称为Bookmark Lookup,如果表中没有聚集索引但是存在非聚集索引我们称为RID Lookup。


为什么突然扯了一嘴Lookup呢?因为Lookup其实就是与执行计划里的scan或index相关。如果聚集索引命中就是指Bookmark Lookup——聚集索引命中的时候,很大概率是索引不能带出select所需的某一部分字段或者是全部字段,所以需要先命中一行,然后把某一行的数据全带出来。非聚集索引命中就是指RID Lookup。


SQL SERVER如何选择执行计划

sqlserver选择某个执行计划,执行计划用某个索引,是这有一个权重判断的。这个权重在执行前都计算出来了。

那怎么查看呢——通过【索引统计信息】。在执行脚本的过程中,sqlserver会根据这些统计信息,选择一个它认为是最合适的方法去执行查询过程。统计信息可以自动定时更新,在SQL Server中也有个参数来控制这个更新方式。


 




语法

DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid);


这里的引号很重要,没会报错。


主要有两个参数:


第一个:是表名或者是索引视图名(给视图加的索引)


第二个:索引名、列名、统计信息。


结果属性介绍

索引前缀集是什么?索引前缀和前缀索引不是一个东西。


索引前缀是指索引的选择性——根据索引定义时的字段顺序来决定索引是否被命中。如果是索引(a,b,c),命中查询的时候是查询条件中有(a) (a,b) (a,b,c)进行命中,但是(b,c)这个查询条件不会命中该索引。所以索引前缀也叫索引列前缀集。


前缀索引说白了就是对文本的前几个字符(具体是几个字符在建立索引时指定)建立索引,这样建立起来的索引更小,所以查询更快。


 


   

 


执行计划详细属性介绍

 




在执行DDL之前,输入一句set statistics profile on 。显示一个表格,表格内是比图上更细节的实际的执行信息。针对这个表的属性做一个整理解析。

 

 



 

原文链接



该文章在 2023/7/26 8:49:40 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved