基于应用于列的标量函数的索引

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 这样的非确定性函数上构建索引,该函数每次调用时都会更改其返回值。

如果你发布你想要索引的函数,解决你的问题会更容易。

【讨论】:

以上是关于基于应用于列的标量函数的索引的主要内容,如果未能解决你的问题,请参考以下文章

避免将函数应用于索引列

python pandas-将带有两个参数的函数应用于列

[R]:根据条件行位置将函数应用于列

在 pandas 中将 lambda 函数应用于列失败

python 将函数应用于列

重新采样 MultiIndexed Pandas DataFrame 并将不同的函数应用于列