为什么 SCHEMABIND 会大幅提高性能?

Why the drastic performance increase WITH SCHEMABIND?

提问人:Guitoux 提问时间:11/11/2023 更新时间:11/11/2023 访问量:79

问:

我正在运行一个复杂的查询,需要 10 分钟左右才能执行。

我追踪到一个定期调用的 UDF,并将 WITH SCHEMABINDING 添加到该函数中。现在,复杂的查询需要几秒钟才能运行,我不太明白为什么。谁能解释一下这种令人难以置信的性能提升从何而来?这个简单 UDF 的代码在下面,我经常使用它。

ALTER FUNCTION [dbo].[GetMaxBatch]()
RETURNS INT with SCHEMABINDING
AS
BEGIN
    DECLARE @max_batch INT
    SELECT @max_batch = max(batch) FROM dbo.map
    RETURN @max_batch;
END;

由于 UDF 在会话中返回相同的值,因此我只是对该值进行了硬编码,并注意到运行得非常好。开始研究 UDF 本身并添加了模式绑定,这很有效。

sql-server 查询优化 用户定义函数

评论

0赞 Martin Smith 11/11/2023
SQL Server 的版本?也只是一个还是一个写入操作?和执行计划?SELECT
0赞 Guitoux 11/11/2023
我使用的是 2019 年,是的,复杂的查询只是做了很多联接,其中要联接的表/视图依赖于此 UDF 来截断返回的数据集。对不起,不够精明,无法谈论执行计划。
1赞 Guitoux 11/11/2023
谢谢约翰,这是有道理的!
1赞 Dale K 11/11/2023
也许只是您编辑了函数并强制重新编译的事实?如果再次删除它,它会变慢吗?
1赞 Xedni 11/11/2023
可能会读一读:dba.stackexchange.com/questions/140381/......

答: 暂无答案