MS SQL中的最佳性能 - 使用UDF vs trigger的计算列与任何其他解决方案

时间:2016-12-02 09:51:26

标签: sql-server performance sql-server-2008 user-defined-functions calculated-columns

我的任务是替换40多个SQL表中的重复文本列,查找新表以保存单个数据集并通过ID引用此数据。目的是创建一个“单一事实来源”,并在单个记录发生变化时避免多次更新。

db在数十个表中保存了数百万行,这些表由数百个存储过程,视图和函数等访问,其中一组Web应用程序提供和使用数据。反过来,每天有10,000多名用户访问这些用户。

严格的解决方案是规范化数据,然后重写所有存储的过程等以使用新结构。但是,这需要数百小时的开发时间。

我研究了用引用UDF的计算列替换现有文本列的快捷方式,该列引用了返回相关文本记录的UDF。一个例子看起来像......

ALTER FUNCTION [LookupMyText](@IDValue int)
    RETURNS nvarchar(20)
AS
BEGIN
    DECLARE @MyReturn varchar(20)
    SELECT @MyReturn = R.MyTextField FROM dbo.MyLookupTable R WHERE R.UniqueID = @IDValue
    RETURN @MyReturn
END

这将从表格定义中引用......

([dbo].[LookupMyText]([LookupID]))

但是我读到在计算列中使用标量UDF会导致巨大的性能损失。此外,由于查找用户数据,我无法保留该列。

所以这看起来像一个非首发。

另一种解决方案可能是为新查找表设置更改触发器。性能不应太差,因为变化很少(通常每年几十次,超过700条记录)。

任何人都可以建议上述解决方案在您的体验中是否可行,或者我是否需要咬紧牙关并在存储过程中进行拖网搜索并进行适当的规范化工作?

0 个答案:

没有答案