基于应用于列的标量函数的索引
Posted
技术标签:
【中文标题】基于应用于列的标量函数的索引【英文标题】:An index based on a scalar function applied to a column 【发布时间】:2009-02-12 11:35:42 【问题描述】:我有一个用户标量值函数,它接受 NVARCHAR(MAX) 并返回 NVARCHAR(MAX)。为了提高使用此功能的 GROUP BY 命令的性能,我想也基于它创建一个索引。但是documentation 说什么 CREATE INDEX 命令只接受列而不是表达式,所以这是非法的:
CREATE INDEX an_index ON a_table (foo(a_column))
有什么解决方法吗?
谢谢!
【问题讨论】:
【参考方案1】:您需要创建一个计算列:
CREATE TABLE a_table (a_column NVARCHAR(MAX), a_foo AS foo(a_column))
CREATE INDEX an_index ON a_table (a_foo)
为了可索引,函数foo
当然必须满足某些要求:
索引调用用户定义函数的计算列
当用户定义函数具有以下属性值时,可以在索引中使用调用用户定义函数的计算列:
IsDeterministic = true
IsSystemVerified = true
(除非计算的列是持久化的)UserDataAccess = false
SystemDataAccess = false
您不能在像 GETDATE
这样的非确定性函数上构建索引,该函数每次调用时都会更改其返回值。
如果你发布你想要索引的函数,解决你的问题会更容易。
【讨论】:
以上是关于基于应用于列的标量函数的索引的主要内容,如果未能解决你的问题,请参考以下文章