決定論的でない限り、計算列にインデックスを追加することはできません。
「決定論的関数は、特定の入力値のセットを指定して呼び出され、データベースの状態が同じである場合は常に同じ結果を返します。非決定論的関数は、特定の入力値のセットを指定して呼び出されるたびに、異なる結果を返す場合があります。アクセスするデータベースの状態が変わらなくても。"
例:
CREATE FUNCTION dbo.FuncA()
RETURNS [float]
WITH SCHEMABINDING -- required option
BEGIN
RETURN 1.0 -- DB engine parses body, and marks this func. as 'deterministic'
END
GO
CREATE TABLE TableA (
K int primary key clustered,
A AS dbo.FuncA() PERSISTED -- must be persisted
)
GO
CREATE VIEW ViewA
WITH SCHEMABINDING -- required option
AS
SELECT K, A FROM dbo.TableA
GO
CREATE UNIQUE CLUSTERED INDEX IDX1 ON dbo.ViewA (K, A)
GO
PERSISTED
を指定する必要があります [real]
のような不正確なデータ型 および [float]
、それ以外の場合は、計算された列を持つビューに自由にインデックスを作成できます ([10 進数] で問題ありません)。