インデックス オプションの設定

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

このトピックでは、SQL Server Management Studio または Transact-SQL を使用して、SQL Server でインデックスのプロパティを変更する方法について説明します。

この記事の内容

はじめに

制限事項と制約事項

  • ALTER INDEX ステートメントに SET 句を使用することによって、ALLOW_PAGE_LOCKS、ALLOW_ROW_LOCKS、 OPTIMIZE_FOR_SEQUENTIAL_KEY、IGNORE_DUP_KEY、および STATISTICS_NORECOMPUTE の各オプションが直ちにインデックスに適用されます。
  • ALTER INDEX REBUILD または CREATE INDEX WITH DROP_EXISTING を使用してインデックスを再構築する際には、PAD_INDEX、FILLFACTOR、SORT_IN_TEMPDB、IGNORE_DUP_KEY、STATISTICS_NORECOMPUTE、ONLINE、ALLOW_ROW_LOCKS、ALLOW_PAGE_LOCKS、MAXDOP、および DROP_EXISTING (CREATE INDEX のみ) の各オプションを設定できます。

セキュリティ

アクセス許可

テーブルまたはビューに対する ALTER 権限が必要です。

SQL Server Management Studio を使用する

インデックスのプロパティをテーブル デザイナーで変更するには

  1. オブジェクト エクスプローラーで、インデックスのプロパティの変更対象となるテーブルが格納されているデータベースをプラス記号をクリックして展開します。
  2. プラス記号をクリックして [テーブル] フォルダーを展開します。
  3. インデックスのプロパティを変更するテーブルを右クリックし、[デザイン] を選択します。
  4. [テーブル デザイナー] メニューの [インデックス/キー]をクリックします。
  5. 変更するインデックスを選択します。 対応するプロパティがメイン グリッドに表示されます。
  6. 該当するプロパティの設定を変更してインデックスをカスタマイズします。
  7. [閉じる] をクリックします。
  8. [ファイル] メニューの table_nameを保存]を選びます。

インデックスのプロパティをオブジェクト エクスプローラーで変更するには

  1. オブジェクト エクスプローラーで、インデックスのプロパティの変更対象となるテーブルが格納されているデータベースをプラス記号をクリックして展開します。
  2. プラス記号をクリックして [テーブル] フォルダーを展開します。
  3. インデックスのプロパティを変更するテーブルのプラス記号をクリックして展開します。
  4. プラス記号をクリックして [インデックス] フォルダーを展開します。
  5. プロパティを変更するインデックスを右クリックし、 [プロパティ]を選択します。
  6. [ページの選択][オプション]を選択します。
  7. 該当するプロパティの設定を変更してインデックスをカスタマイズします。
  8. インデックス列の位置を追加、削除、または変更するには、[ インデックスのプロパティ -[全般][全般] ページをクリックします。 詳細については、「 Index Properties F1 Help」をご覧ください。

Transact-SQL の使用

テーブル内のすべてのインデックスのプロパティを表示するには

次の例では、AdventureWorks データベースのテーブル内のすべてのインデックスのプロパティを示します。

SELECT i.name AS index_name
   , i.type_desc
   , i.is_unique
   , ds.type_desc AS filegroup_or_partition_scheme
   , ds.name AS filegroup_or_partition_scheme_name
   , i.ignore_dup_key
   , i.is_primary_key
   , i.is_unique_constraint
   , i.fill_factor
   , i.is_padded
   , i.is_disabled
   , i.allow_row_locks
   , i.allow_page_locks
   , i.has_filter
   , i.filter_definition
FROM sys.indexes AS i
   INNER JOIN sys.data_spaces AS ds
      ON i.data_space_id = ds.data_space_id
   WHERE is_hypothetical = 0 AND i.index_id <> 0
       AND i.object_id = OBJECT_ID('HumanResources.Employee')
;

インデックスのプロパティを設定するには

次の例では、AdventureWorks データベース内のインデックスのプロパティを設定します。

ALTER INDEX AK_SalesOrderHeader_SalesOrderNumber ON
    Sales.SalesOrderHeader
SET (
    STATISTICS_NORECOMPUTE = ON,
    IGNORE_DUP_KEY = ON,
    ALLOW_PAGE_LOCKS = ON
    )
;
ALTER INDEX ALL ON Production.Product
REBUILD WITH 
   (
       FILLFACTOR = 80
       , SORT_IN_TEMPDB = ON
       , STATISTICS_NORECOMPUTE = ON
   )
;

詳細については、「ALTER INDEX (Transact-SQL)」を参照してください。