首页 > 数据库 >sqlServer执行计划分析

sqlServer执行计划分析

时间:2022-10-31 11:35:10浏览次数:53  
标签:Scan 聚集 sqlServer 查询 索引 计划 Table 执行

SQL Server Management Studio 是一个交互式图形工具,使数据库管理员或开发人员可以编写查询、同时执行多个查询、查看结果、分析查询计划以及获得提高查询性能的帮助。

如何开启执行计划

执行计划需要关注的几个点

1.步骤影响的行可以根据连接线的粗细来判断

2.sql查询数据的方式

3.图形执行计划从右到左,从上到下看

下面是Sql Server查询数据的五种方式,这对我们理解执行计划非常重要。五种方式如下。

  1. 【Table Scan】:遍历整个表来查找匹配的数据行,速度最慢。
  2. 【Index Scan】:依据索引先从表中过滤出一部分记录,然后再查找所有匹配的数据行。查询速度比Table Scan稍快。
  3. 【Index Seek】:依据索引,定位记录的存放位置,然后再取得记录,因此,其查询速度比前面两种都快。
  4. 【Clustered Index Scan】:按聚集索引(一般是主键)遍历整个表,因为它的记录就是按聚集索引来顺序存放的。注意它与Table Scan的区别,其实它们都是进行全表扫描,只不过Table Scan是不带索引的扫描,而Clustered Index Scan是按聚集索引扫描的。(效率和Table Scan差不多)
  5. 【Clustered Index Seek】:聚集索引获取记录,它是直接拿到那条记录,而没有进行全表扫描,因此它的查询速度是最快的。

     

根据执行计划细节要做的优化操作

  1. 如果select * 通常情况下聚集索引会比非聚集索引更优。

  2. 如果出现Nested Loops,需要查下是否需要聚集索引,非聚集索引是否可以包含所有需要的列。

  3. Merge Join时需要检查下原有的集合是否已经有排序,如果没有排序,使用索引能否解决。

  4. 出现表扫描,聚集索引扫描,非聚集索引扫描时,考虑语句是否可以加where限制,select * 是否可以去除不必要的列。

  5. 出现Rid查找时,是否可以加索引优化解决。

  6. 在计划中看到不是你想要的索引时,看能否在语句中强制使用你想用的索引解决问题,强制使用索引的办法Select CluName1,CluName2 from Table with(index=IndexName)。

  7. 看到不是你想要的连接算法时,尝试强制使用你想要的算法解决问题。强制使用连接算法的语句:select * from t1 left join t2 on t1.id=t2.id option(Hash/Loop/Merge Join)

  8. 看到不是你想要的聚合算法是,尝试强制使用你想要的聚合算法。强制使用聚合算法的语句示例:select age ,count(age) as cnt from t1 group by age option(order/hash group)

  9. 看到不是你想要的解析执行顺序是,或这解析顺序耗时过大时,尝试强制使用你定的执行顺序。option(force order)

  10. 看到有多个线程来合并执行你的sql语句而影响到性能时,尝试强制是不并行操作。option(maxdop 1)

  11. 在存储过程中,由于参数不同导致执行计划不同,也影响啦性能时尝试指定参数来优化。option(optiomize for(@name=‘zlh’))

  12. 不操作多余的列,多余的行,不做务必要的聚合,排序

标签:Scan,聚集,sqlServer,查询,索引,计划,Table,执行
From: https://www.cnblogs.com/lambertlbl/p/16843689.html

相关文章

  • SQLServer备份信息查看
    查看数据文件和日志文件的备份记录SELECT[filegroup_name],[backed_up_page_count],[file_type],[file_size],[logical_name],[phy......
  • P8817 CSP-S 2022 假期计划
    P8817CSP-S2022假期计划-洛谷|计算机科学教育新生态(luogu.com.cn)下文中,\(u\tov\)可达意为\(u\tov\)可以经过不多于\(k\)次转车到达,即\(u\)到\(v\)......
  • 图解mapreduce原理和执行过程
    说明:下面的南京大学计算机系黄宜华老师开设的mapreduce课程的课件,这里稍作整理和总结。本文旨在对接触了mapreduce之后,但是对mapreduce的工作流程仍不是很清楚的人员,当然包......
  • 创建外部表步骤及解决ORA-29913:执行ODCIETTABLEOPEN调出时出错
    创建外部表步骤建立目录对象(用sys用户创建、授权)外部表所在路径一定要写对!!!createdirectoryext_dataas'D:\ORACLE';grantread,writeondirectoryext_datato......
  • [CSP-S 2022] 假期计划
    link\(1-A-B-C-D-1\)非常对称,我们断开来,分成\(1-A-B\)和\(C-D-1\)两部分,不难发现这两块是完全一致的。首先对于每个景点\(x\)求出距离它不过K、且距离1不超过......
  • flink开发环境执行sql及生产环境提交sql文件
    flink提供了sql-client.sh工具可直接操作sql,该工具一般在开发环境用于调试,在生产环境还是要打成jar文件。为了避免在java文件中写大量sql,我们可以将sql提取出来放到一......
  • 执行npm install命令出错问题
    \1.npmERR!codeE404npmERR!404NotFound-GEThttps://registry.npmjs.com/@mlamp%2Fuser-info-dropdown-Notfound是看到这个博主说的解决方案才解决的→http......
  • 数据库定时执行sql mysql定时任务 event 执行定时任务 和sql server定时任务 作业
     本片文章目的:抛弃触发器  学会使用mysqlsqlserver  使用定时任务执行定时sql 1.sqlserver定时任务   sqlserver集成化微软开发特别的好一个结构化数......
  • 【WC2010】重建计划(分数规划+长链剖分)
    长链剖分因为有很多巨佬只是讲了一下大致的做法,并没有详细地解释如何维护,所以就有了这篇题解。巨佬们都不屑于详细写,我太弱了/kk首先先对原树进行长链剖分。先讲一些定......
  • 立即执行函数
    立即执行函数形式(function())({ ..content})(function(){ ..content}())//es6推荐特别实例(function(a){ return(function(b){ console.log(a); })(1);......