86得票4回答
为什么我的查询突然比昨天慢了?

[问候语] (选择一个) [ ] Well trained professional, [ ] Casual reader, [ ] Hapless wanderer, 我有一个(选择所有适用的选项) [ ] query [ ] stored procedure [ ] databa...

70得票4回答
Index Seek vs Index Scan

看着一个运行缓慢的查询的执行计划,我注意到一些节点是索引搜索,而另一些节点是索引扫描。 索引搜索和索引扫描有什么区别? 哪个性能更好? SQL是如何选择其中之一的? 我知道这是三个问题,但我认为回答第一个问题将解释其他问题。

47得票3回答
过度的排序内存授予

为什么这个简单查询被分配了这么多内存? -- Demo table CREATE TABLE dbo.Test ( TID integer IDENTITY NOT NULL, FilterMe integer NOT NULL, SortMe integer NOT...

43得票3回答
参数嗅探 vs VARIABLES vs 重新编译 vs OPTIMIZE FOR UNKNOWN 在数据库查询优化中,我们经常会遇到一些技术和方法来提高查询性能。其中四个常见的方法是参数嗅探、VARIABLES、重新编译和OPTIMIZE FOR UNKNOWN。 参数嗅探是一种通过检查查询中的参数值来确定最佳执行计划的方法。它基于查询第一次执行时的参数值来选择执行计划,并将其缓存以供后续使用。这种方法适用于参数值变化不频繁的情况,因为如果参数值发生变化,可能会导致执行计划选择不当。 VARIABLES 是一种通过将查询中的参数替换为变量来解决参数嗅探问题的方法。通过使用变量,查询每次执行时都会重新评估并选择最佳执行计划。这种方法适用于参数值变化频繁的情况,因为它可以动态地适应参数值的变化。 重新编译是一种在每次执行查询时都重新编译查询计划的方法。这种方法确保每次执行都使用最新的执行计划,但也会增加额外的开销。因此,它适用于查询执行频率较低的情况。 OPTIMIZE FOR UNKNOWN 是一种通过假设查询中的参数值是未知的来选择执行计划的方法。它可以避免参数嗅探和重新编译带来的性能问题,但可能会导致执行计划在某些特定参数值下不够优化。 在选择这些方法时,我们需要根据具体情况来权衡它们的优缺点,并选择最适合的方法来提高查询性能。

所以今天早上我们有一个长时间运行的存储过程引起了问题(运行时间超过30秒)。我们决定检查一下是否是参数嗅探的问题。因此,我们重写了存储过程,并将传入参数设置为变量,以防止参数嗅探。这是一种经过验证的方法。查询时间显著提升(不到1秒)。在查看查询计划时,我们发现改进出现在原始索引未使用的地方。 ...

42得票3回答
执行计划基础 -- 散列匹配混淆

我开始学习执行计划,对哈希匹配的工作方式以及为什么在简单连接中使用它感到困惑。 select Posts.Title, Users.DisplayName From Posts JOIN Users on Posts.OwnerUserId = Users.Id OPTION (MAXDOP...

40得票2回答
使用XML读取器优化计划

执行从这里查询,以从默认的扩展事件会话中提取死锁事件 SELECT CAST ( REPLACE ( REPLACE ( XEventData.XEvent.value ('(data/value)[1]', 'varchar(max)'), ...

38得票2回答
TOP在执行计划中如何影响,并且为什么会影响呢?

对于我正在优化的一个相对复杂的查询,我注意到删除TOP n子句会改变执行计划。我本以为当查询包含TOP n时,数据库引擎会忽略TOP子句运行查询,然后在最后将结果集缩小到所请求的n行。图形化执行计划似乎表明情况确实如此——TOP是“最后”一步。但似乎还有更多事情发生。 我的问题是,TOP n...

36得票3回答
为什么当我内联变量时,SQL Server会使用更好的执行计划?

我有一个我正在尝试优化的SQL查询: DECLARE @Id UNIQUEIDENTIFIER = 'cec094e5-b312-4b13-997a-c91a8c662962' SELECT Id, MIN(SomeTimestamp), MAX(SomeInt) FROM ...

33得票2回答
在递归公共表达式中使用EXCEPT

为什么以下查询会返回无限行?我本来期望EXCEPT子句可以终止递归。 with cte as ( select * from ( values(1),(2),(3),(4),(5) ) v (a) ) ,r as ( select a ...