Ale*_*ola 3 sql-server replace
分析一个简单的查询,我注意到 REPLACE 函数增加了估计的行大小。查看在 AdventureWorks 上执行的以下查询:
select p.BusinessEntityID, REPLACE(p.FirstName, 'a', 'b') as X
from Person.Person p
Run Code Online (Sandbox Code Playgroud)
以下是执行计划。仅应用与 REPLACE 函数相关的计算标量组件时,估计的行大小从 65 B 开始增加到 4015 B。谁能解释一下吗?
测试在Sql Server 2022上完成。
提前致谢。
SELECT TOP (1)
BaseType = SQL_VARIANT_PROPERTY(REPLACE(P.FirstName, 'a', 'b'), 'BaseType'),
MaxLen = SQL_VARIANT_PROPERTY(REPLACE(P.FirstName, 'a', 'b'), 'MaxLength')
FROM Person.Person AS P;
Run Code Online (Sandbox Code Playgroud)
基本类型 | 最大长度 |
---|---|
nvarchar | 8000 |
通常,您可以用较长的子字符串替换较短的子字符串。考虑到所提供的子字符串的长度、预期匹配的数量以及字节计数的任何差异,即使字符数相同,SQL Server 似乎也不会尝试确定结果的确切最大长度。
对于非最大输入,返回类型限制为 8000 字节(如文档所述)。与往常一样,可变长度列的估计值是最大长度的 50%。
如果这给您带来问题,您当然可以明确地CAST
或CONVERT
结果。REPLACE
作为旁注,通常最好匹配数据类型,因此示例中的文字应具有 N 前缀,如FirstNamenvarchar(50)
。
SELECT CONVERT(nvarchar(50), REPLACE(P.FirstName, N'a', N'b'))
FROM Person.Person AS P;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
257 次 |
最近记录: |