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 |
