Sql-Server

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

  • December 21, 2021

在閱讀 PostgreSQL 的文件時,我剛剛遇到了基於表達式的索引(又名“功能索引”)(我以前不知道這樣的索引)。

我只是想知道在 Microsoft SQL Server 中是否有任何與此類似/等效的東西?我已閱讀有關索引的 SQL Server 文件,但沒有看到任何明顯相似/等效的內容。

雖然 SQL Server 本身沒有功能索引的特性,但可以通過在 Computed Column 之上建立索引來模仿類似的實現。計算列允許使用函式。它們甚至還可以持久化,以便將函式的結果儲存在磁碟上的列中(而不是在查詢執行時每次都進行評估)。

只要滿足我上面連結的文件的要求,就可以在類似於 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'

在此處輸入圖像描述

引用自:https://dba.stackexchange.com/questions/305100