gpt4 book ai didi

tsql - SQL 会为每一行重新计算函数还是只计算一次,将其转换为常量

转载 作者:行者123 更新时间:2023-12-04 21:22:40 24 4
gpt4 key购买 nike

如果我有一个功能

ALTER FUNCTION [dbo].[GetCycleDate]
(
)
RETURNS DATE
AS
BEGIN
DECLARE @CYC_DT DATE

SELECT
@CYC_DT = CYC_DT
FROM
CYC_DT
WHERE
CURR_CYC_IND = 'C'

RETURN @CYC_DT

END

对于一个非常大的表,这两条 SQL 的性能是否几乎相同?
SELECT
*
FROM
[dbo].Table S
INNER JOIN dbo.CYC_DT D ON
S.GL_DT = D.CYC_DT AND
D.CURR_CYC_IND = 'C'


SELECT
*
FROM
[dbo].Table S
WHERE

S.GL_DT = dbo.GetCycleDate()

我知道避免使用该函数更安全,但出于测试目的,我希望能够操纵该函数以返回硬编码结果,而不会影响依赖于在 Cycle date 中设置的不同日期的其他人所做的测试 table 。我希望能够在不影响其他人的情况下切换到不同的日期。

最佳答案

这样做通常是一个坏主意,因为当涉及标量 UDF 时,优化器可以为您做的事情更加有限。:

http://blogs.msdn.com/b/dfurman/archive/2009/12/02/query-performance-scalar-udfs-and-predicate-pushdown.aspx

http://www.sql-server-performance.com/2005/sql-server-udfs/

由于您的标量 UDF 未参数化,并且您的示例查询很简单,您可能会侥幸逃脱,但您必须进行测试才能确定。

关于tsql - SQL 会为每一行重新计算函数还是只计算一次,将其转换为常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9422494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com