相关疑难解决方法(0)

在仅使用文字值的 WHERE 子句中替换 ISNULL() 有哪些不同的方法?

这不是关于:

这不是关于接受用户输入或使用变量的全面查询的问题。

这完全是关于ISNULL()WHERE子句中使用where用NULL金丝雀值替换值以与谓词进行比较的查询,以及在 SQL Server中将这些查询重写为SARGable 的不同方法。

你为什么不在那边坐?

我们的示例查询针对 SQL Server 2016 上 Stack Overflow 数据库的本地副本,并查找NULL年龄或年龄 < 18 岁的用户。

SELECT COUNT(*)
FROM dbo.Users AS u
WHERE ISNULL(u.Age, 17) < 18;
Run Code Online (Sandbox Code Playgroud)

查询计划显示了一个非常周到的非聚集索引的扫描。

坚果

scan 操作符显示(由于 SQL Server 的最新版本中对实际执行计划 XML 的补充)我们读取了每一行。

坚果

总的来说,我们进行了 9157 次读取并使用了大约半秒的 CPU 时间:

Table 'Users'. Scan count 1, logical reads 9157, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, …
Run Code Online (Sandbox Code Playgroud)

sql-server

58
推荐指数
3
解决办法
2万
查看次数

SQL Server--如果存储过程和计划缓存中的逻辑

SQL Server 2012 和 2016 标准:

如果我将if-else逻辑放在存储过程中以执行代码的两个分支之一,取决于参数的值,引擎是否缓存最新版本?

如果在接下来的执行中,参数的值发生了变化,它是否会重新编译并重新缓存存储过程,因为必须执行代码的不同分支?(此查询的编译成本非常高。)

performance sql-server sql-server-2016 query-performance

18
推荐指数
1
解决办法
4572
查看次数