相关疑难解决方法(0)

SCHEMABINDING 万圣节保护之外的功能是否有任何好处?

众所周知,SCHEMABINDING一个函数可以避免更新计划中不必要的假脱机

如果您使用不涉及任何表(即不访问数据)的简单 T-SQL UDF,请确保SCHEMABINDING在创建 UDF 期间指定该选项。这将使 UDF 模式绑定并确保查询优化器不会为涉及这些 UDF 的查询计划生成任何不必要的假脱机运算符。

SCHEMABINDING即使不访问数据,函数还有其他优势吗?

sql-server functions

56
推荐指数
1
解决办法
8625
查看次数

未存储标量函数值

我创建了一个标量值函数,它在传入的秒数中暂停。这个函数不会在生产中使用。如果我向查询添加 UDF,我正在尝试测试 SQL Server 如何评估和创建计划。我对它如何评估我的 3 个查询中的最后一个的差异感到非常困惑。首先是创建测试函数的代码:

CREATE FUNCTION dbo.[sleep](@seconds int)
RETURNS datetime
as
BEGIN

DECLARE @sleepUntil datetime
DECLARE @dummy int
SET @sleepUntil = DATEADD(s, @seconds, getdate())
WHILE getdate() < @sleepUntil
    SET @dummy = 0
RETURN getdate()
END
Run Code Online (Sandbox Code Playgroud)

现在创建一个表来测试查询

CREATE TABLE #table (num int)
Run Code Online (Sandbox Code Playgroud)

并插入值

INSERT INTO #table 
VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9)
Run Code Online (Sandbox Code Playgroud)

第一个查询需要 2 秒才能运行 - 假设 SQL Server 存储从标量函数返回的值,这是有道理的。

   SELECT num
   FROM #table t
   WHERE dbo.sleep(2)=0 
Run Code Online (Sandbox Code Playgroud)

第二个仍然需要 2 秒 - 所以我的假设是它也一样。

 SELECT num
   FROM #table t
   WHERE EXISTS (select TOP 1 …
Run Code Online (Sandbox Code Playgroud)

sql-server optimization functions

5
推荐指数
1
解决办法
801
查看次数

标签 统计

functions ×2

sql-server ×2

optimization ×1