1

我有一个用户标量值函数,它接受 NVARCHAR(MAX) 并返回 NVARCHAR(MAX)。为了提高使用此功能的 GROUP BY 命令的性能,我想也基于它创建一个索引。但是文档说 CREATE INDEX 命令只接受列而不是表达式,所以这是非法的:

CREATE INDEX an_index ON a_table (foo(a_column))

有任何解决方法吗?

谢谢!

4

1 回答 1

4

您需要创建一个计算列:

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每次调用时都会更改其返回值。

如果您发布要索引的功能,解决您的问题会更容易。

于 2009-02-12T11:38:41.763 回答