web-dev-qa-db-ja.com

SQL Server:計算されたインデックスを作成することは可能ですか

SQL Serverでは、計算にインデックスを作成できますか?

以下はnotで機能します:

CREATE INDEX customermonth ON customers(month(dob));

一部のデータベースでは、これを行うことができます。 SQL Serverでこれを行うトリックはありますか?

5
Manngo

はい、可能ですが、使用した構文ではできません。重要なのは、テーブルに計算された列を作成し、それにインデックスを付ける必要があることです。

ALTER TABLE customers ADD MonthOfBirth AS MONTH(dob) PERSISTED;
CREATE INDEX customermonth ON customers (MonthOfBirth);

計算列は、他の製品が生成列と呼ぶSQL Serverの名前であり、STORED(cf. VIRTUAL)の代わりにPERSISTEDを使用します。

SQL Serverで計算された列にインデックスを作成する方法 Atif Shehzadを参照してください。

当然、これには、テーブルのスキーマを変更するための権限が必要であり、厄介な側面がないことを確認する必要があります列を追加した場合の影響(SELECT * FROM customers;を使用するレポートの分割など)

計算カラムは、インデックスを作成する前に常にPERSISTEDである必要はありません。 トピックに関するドキュメント を参照してください。

10
mendosi