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

[转帖]sqlserver执行计划需要关注的几个点

freeflydom
2023年7月26日 9:41 本文热度 465

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


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


2.sql查询数据的方式


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


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


【Table Scan】:遍历整个表来查找匹配的数据行,速度最慢。

【Index Scan】:依据索引先从表中过滤出一部分记录,然后再查找所有匹配的数据行。查询速度比Table Scan稍快。

【Index Seek】:依据索引,定位记录的存放位置,然后再取得记录,因此,其查询速度比前面两种都快。

【Clustered Index Scan】:按聚集索引(一般是主键)遍历整个表,因为它的记录就是按聚集索引来顺序存放的。注意它与Table Scan的区别,其实它们都是进行全表扫描,只不过Table Scan是不带索引的扫描,而Clustered Index Scan是按聚集索引扫描的。(效率和Table Scan差不多)

【Clustered Index Seek】:聚集索引获取记录,它是直接拿到那条记录,而没有进行全表扫描,因此它的查询速度是最快的。

 

create CLUSTERED INDEX IX_Id ON Person(Id)   --创建聚簇索引

create NONCLUSTERED INDEX IX_Name ON Person(Name)    --创建非聚集索引

drop INDEX Person.IX_Id   --删除索引


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

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


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


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


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


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


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


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


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


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


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


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


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



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