SQLServerのテーブルに設定されているインデックスをSQLで検索する

プログラミング SQL Server

SQLServerでテーブルに設定されているインデックスを検索する方法です。

スポンサーリンク

テーブルに設定されているインデックスをSQLで検索

SQLServerでテーブルに設定されているインデックスを検索する方法です。

検索するSQL

検索するにはsys.indexesビューから情報を取得します。

--テスト用のテーブルを作成(プライマリキーを設定)
CREATE TABLE test_tbl
(
     idx         INT
    ,name        VARCHAR(20) 
    ,age         INT
    CONSTRAINT test_tbl_pk PRIMARY KEY CLUSTERED 
    (
          idx
    )
)
--テスト用のインデックスを作成(ユニークキーを設定)
CREATE UNIQUE INDEX test_tbl_idx1 ON test_tbl
(
    name
)
--テスト用の通常のインデックスを作成
CREATE  NONCLUSTERED INDEX test_tbl_idx2 ON test_tbl
(
    age
)

--インデックスを検索
SELECT
     t.name AS テーブル名
    ,i.name AS インデックス名 
    ,CASE WHEN i.is_primary_key = 1 THEN 'プライマリーキー' ELSE '' END AS プライマリーキー 
    ,CASE WHEN i.is_unique      = 1 THEN 'ユニークキー'     ELSE '' END AS ユニークキー 
    ,t.create_date AS 作成日 
    ,t.modify_date AS 修正日
FROM
    sys.indexes AS i 
        INNER JOIN sys.tables t ON
            i.object_id = t.object_id 
        INNER JOIN sys.schemas AS s ON
            t.schema_id = s.schema_id 
WHERE
    i.index_id NOT IN (
                       SELECT
                           d.index_id
                        FROM
                           sys.dm_db_index_usage_stats AS d
                        WHERE
                               d.object_id = i.object_id
                           AND i.index_id = d.index_id 
                        )
    AND t.name = 'test_tbl'
ORDER BY
     プライマリーキー DESC
    ,ユニークキー DESC

DROP TABLE test_tbl

実行結果

実行結果は以下のようになります。

テーブル名 インデックス名 プライマリーキー ユニークキー 作成日 修正日
test_tbl test_tbl_pk プライマリーキー ユニークキー 2014-09-30 11:23:23.410 2014-09-30 11:23:23.457
test_tbl test_tbl_idx1 ユニークキー 2014-09-30 11:23:23.410 2014-09-30 11:23:23.457
test_tbl test_tbl_idx2 2014-09-30 11:23:23.410 2014-09-30 11:23:23.457
タイトルとURLをコピーしました