Sql-Server
MS SQL Server 是否支持“功能索引”?
在閱讀 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'