我有一个用户标量值函数,它接受 NVARCHAR(MAX) 并返回 NVARCHAR(MAX)。为了提高使用此功能的 GROUP BY 命令的性能,我想也基于它创建一个索引。但是文档说 CREATE INDEX 命令只接受列而不是表达式,所以这是非法的:
CREATE INDEX an_index ON a_table (foo(a_column))
有任何解决方法吗?
谢谢!
我有一个用户标量值函数,它接受 NVARCHAR(MAX) 并返回 NVARCHAR(MAX)。为了提高使用此功能的 GROUP BY 命令的性能,我想也基于它创建一个索引。但是文档说 CREATE INDEX 命令只接受列而不是表达式,所以这是非法的:
CREATE INDEX an_index ON a_table (foo(a_column))
有任何解决方法吗?
谢谢!
您需要创建一个计算列:
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
每次调用时都会更改其返回值。
如果您发布要索引的功能,解决您的问题会更容易。