【MS SQL】通过执行计划来分析SQL性能

简介: 原文:【MS SQL】通过执行计划来分析SQL性能如何知道一句SQL语句的执行效率呢,只知道下面3种: 1、通过SQL语句执行时磁盘的活动量(IO)信息来分析:SET STATISTICS IO ON (开启) / SET STATISTICS IO OFF (关闭) 2、通过SQL语句执行时...
原文: 【MS SQL】通过执行计划来分析SQL性能

如何知道一句SQL语句的执行效率呢,只知道下面3种:

1、通过SQL语句执行时磁盘的活动量(IO)信息来分析:SET STATISTICS IO ON (开启) / SET STATISTICS IO OFF (关闭)

2、通过SQL语句执行时语法分析、编译以及执行所消耗的时间:SET STATISTICS TIME ON (开启) / SET STATISTICS TIME OFF (关闭)

3、通过执行计划查看:Ctrl + L

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

首先有个表,表的数据不多,所以执行结果比较起来可能不会太明显...

 

1、先执行 SET STATISTICS IO ON & SET STATISTICS TIME ON;

 

2、执行查询语句,选择"消息"选项页;为方便查看,使用了聚合函数、GROUP BY、ORDER BY

【我们并未查询表:Worktable,为何会有Worktable的记录呢,最最最后面有注明。】

3、按Ctrl + L 组合键,查看执行计划:

==================================================================================

如何查看表的设计或SQL语句是否是优化的,这边以建立索引后执行相同的SQL语句,来比对执行结果。

==================================================================================

1、建立索引。(为测试性能而建立,未必适用于真实场景)

2、建立索引后执行语句所消耗的时间:

【这边没有出现Worktable的记录,最最最后面有注明。】

3、按Ctrl + L 组合键,查看执行计划:

 

====是不是感觉不到什么变化?下图是未建立索引和建立索引相同SQL语句执行效能的对比=====

 

由于测试数据较少,结果并不明显。

但可以通过掌握 "IO读取"、"时间开销"、"执行计划"的参数变化,对SQL性能进行调优。 

 

==============================================================

【Worktable】在MSDN说明:  

关系引擎可能需要生成一个工作表以执行 SQL 语句中指定的逻辑操作。工作表是用于保存中间结果的内部表。

 某些 GROUP BYORDER BY  UNION查询中会生成工作表。

 例如,如果 ORDER BY 子句引用了不为任何索引涵盖的列,则关系引擎可能需要生成一个工作表以按所请求的顺序对结果集进行排序。

 工作表有时也用作临时保存执行部分查询计划所得结果的假脱机。工作表在tempdb中生成,并在不再需要时自动删除。

目录
相关文章
|
3月前
|
SQL 数据可视化 关系型数据库
MCP与PolarDB集成技术分析:降低SQL门槛与简化数据可视化流程的机制解析
阿里云PolarDB与MCP协议融合,打造“自然语言即分析”的新范式。通过云原生数据库与标准化AI接口协同,实现零代码、分钟级从数据到可视化洞察,打破技术壁垒,提升分析效率99%,推动企业数据能力普惠化。
288 3
|
2月前
|
SQL 关系型数据库 MySQL
为什么这些 SQL 语句逻辑相同,性能却差异巨大?
我是小假 期待与你的下一次相遇 ~
159 0
|
6月前
|
SQL 关系型数据库 PostgreSQL
CTE vs 子查询:深入拆解PostgreSQL复杂SQL的隐藏性能差异
本文深入探讨了PostgreSQL中CTE(公共表表达式)与子查询的选择对SQL性能的影响。通过分析两者底层机制,揭示CTE的物化特性及子查询的优化融合优势,并结合多场景案例对比执行效率。最终给出决策指南,帮助开发者根据数据量、引用次数和复杂度选择最优方案,同时提供高级优化技巧和版本演进建议,助力SQL性能调优。
604 1
|
7月前
|
SQL 算法 数据挖掘
【SQL周周练】:利用行车轨迹分析犯罪分子作案地点
【SQL破案系列】第一篇: 如果监控摄像头拍下了很多车辆的行车轨迹,那么如何利用这些行车轨迹来分析车辆运行的特征,是不是能够分析出犯罪分子“踩点”的位置
226 15
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
539 13
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
362 9
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
261 6
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
1182 3
|
存储 SQL C++
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
1171 1