sql >> データベース >  >> RDS >> Sqlserver

計算列関数を使用したスキーマ バインディング

    決定論的でない限り、計算列にインデックスを追加することはできません。

    「決定論的関数は、特定の入力値のセットを指定して呼び出され、データベースの状態が同じである場合は常に同じ結果を返します。非決定論的関数は、特定の入力値のセットを指定して呼び出されるたびに、異なる結果を返す場合があります。アクセスするデータベースの状態が変わらなくても。"

    例:

    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 進数] で問題ありません)。




    1. PostgreSQLで小数点以下がゼロ以外のレコードをフェッチする

    2. プログラムで複数の列を含むwhere-in句を使用してPostgreSQLクエリを実行するにはどうすればよいですか?

    3. Oracleraise_application_errorエラー番号のベストプラクティス

    4. Django全文検索の最適化-Postgres