sli*_*boy 6 postgresql index sql-server functions
我在阅读 PostgreSQL 文档时刚刚遇到基于表达式的索引(又名“功能索引”)(我以前不知道此类索引)。
我只是想知道 Microsoft SQL Server 中是否有与此类似/等效的内容?我已阅读有关索引的 SQL Server 文档,但没有看到任何明显相似/等效的内容。
J.D*_*.D. 14
虽然 SQL Server 本身没有功能索引的功能,但可以通过在计算列之上建立索引来模拟类似的实现。计算列允许使用函数。它们甚至还可以被持久化,以便将函数的结果存储在磁盘上的列中(而不是每次在查询运行时评估)。
只要满足我上面链接的文档的要求,就可以在函数结果之上建立索引,类似于 PostgreSQL 的功能索引。最重要的要求之一是该函数是确定性函数,这意味着它对于相同的输入始终输出相同的结果。例如,ISNULL()是确定性的,因为相同的输入参数将始终返回相同的输出结果。但该GETDATE()函数是不确定的,因为相同的输入(恰好不是该特定函数的输入)总是会导致不同的输出结果,一天又一天,当它被调用时。
最接近的等效方法是您可以创建一个计算列,然后对该列建立索引。
计算列匹配有点碰运气,但通常 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)