【发布时间】:2015-07-01 02:57:39
【问题描述】:
我有一个高性能数据库(在 SQL Server 2012 上)。我的一个观点有一个虚拟列,由一个内联标量值 UDF 表示,该 UDF 计算来自前一列值的自定义哈希。我将此计算从视图移到了一个基础表中以提高性能。我在表中添加了一个新的计算列并保留了数据。然后,在该列上创建索引并在相应的视图中引用它(基本上将逻辑从视图迁移到表中)。
现在我想知道为什么不向表中添加一个常规的 VARCHAR(32) 列而不是计算的 PERSISTED 列?我可以使用上述 UDF 在此列上为所有新插入创建一个 DEFAULT 并重新计算历史记录。
具有 PERSISTED 数据的索引计算列与常规 NC 索引列相比有什么优势吗?
谢谢。
【问题讨论】:
-
什么是“常规 NC 索引列”?
-
在这种情况下,VARCHAR(32) 数据类型的新列具有非聚集索引。我想它应该显示为 SELECT * FROM sys.columns WHERE is_computed 1.... 我理解你的问题吗?
-
@GordonLinoff 我认为他的意思是一个非常普通的列,上面有一个非聚集索引。然后他将一些计算结果写入该列,以加快查询速度。
-
@Milan:你不能在 SQL Server 中使用
UDF作为默认值 -
@Quassnoi 。 . .根据文档,您可以(msdn.microsoft.com/en-us/library/ms174979(v=sql.110).aspx)。
标签: sql sql-server tsql sql-server-2012