MS SQL Server 支持“功能索引”吗?

sli*_*boy 6 postgresql index sql-server functions

我在阅读 PostgreSQL 文档时刚刚遇到基于表达式的索引(又名“功能索引”)(我以前不知道此类索引)。

我只是想知道 Microsoft SQL Server 中是否有与此类似/等效的内容?我已阅读有关索引的 SQL Server 文档,但没有看到任何明显相似/等效的内容。

J.D*_*.D. 14

虽然 SQL Server 本身没有功能索引的功能,但可以通过在计算列之上建立索引来模拟类似的实现。计算列允许使用函数。它们甚至还可以被持久化,以便将函数的结果存储在磁盘上的列中(而不是每次在查询运行时评估)。

只要满足我上面链接的文档的要求,就可以在函数结果之上建立索引,类似于 PostgreSQL 的功能索引。最重要的要求之一是该函数是确定性函数,这意味着它对于相同的输入始终输出相同的结果。例如,ISNULL()是确定性的,因为相同的输入参数将始终返回相同的输出结果。但该GETDATE()函数是不确定的,因为相同的输入(恰好不是该特定函数的输入)总是会导致不同的输出结果,一天又一天,当它被调用时。


Mar*_*ith 9

最接近的等效方法是您可以创建一个计算列,然后对该列建立索引。

计算列匹配有点碰运气,但通常 SQL Server 会将函数调用与匹配索引相匹配。

CREATE TABLE #Demo
(
Foo VARCHAR(50)
)

ALTER TABLE #Demo ADD LowerFoo AS lower(Foo)

CREATE INDEX IX ON #Demo(LowerFoo)

SELECT COUNT(*)
FROM #Demo 
WHERE lower(Foo) = 'aa'
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Dav*_*oft 6

除了计算列上的索引之外,有时您还可以使用索引视图。计算列会更改表的逻辑设计,有时这是不希望或不可能的。