インデックスの存在確認:システムカタログビュー vs INFORMATION_SCHEMA
SQL Serverで特定のインデックスが存在するかどうかを確認する方法
システムカタログビューを使用する
SQL Serverは、データベースやデータベースサーバーに関する情報を提供するシステムカタログビューを提供しています。これらのビューを組み合わせることで、インデックスの名前とそれに関連するカラム名の一覧を取得できます。
sys.indexes
ビューは、データベース内のすべてのインデックスに関する情報を提供します。このビューを使用して、特定のテーブルに特定のインデックスが存在するかどうかを確認するには、次のクエリを実行します。
SELECT name
FROM sys.indexes
WHERE object_id = OBJECT_ID('テーブル名')
AND name = 'インデックス名'
SELECT column_name
FROM sys.index_columns
WHERE object_id = OBJECT_ID('テーブル名')
AND index_id = INDEX_ID('インデックス名')
AND column_name = 'カラム名'
SELECT index_name
FROM INFORMATION_SCHEMA.indexes
WHERE table_name = 'テーブル名'
AND index_name = 'インデックス名'
SQL Server Management Studio (SSMS) を使用する
SSMSを使用して、テーブルに特定のインデックスが存在するかどうかを確認することもできます。
- SSMSを起動し、データベースに接続します。
- オブジェクトエクスプローラーで、テーブルを展開します。
- [インデックス] フォルダーを展開します。
- インデックスの一覧が表示されます。目的のインデックスが存在するかどうかを確認します。
USE [データベース名]
GO
IF EXISTS (
SELECT *
FROM sys.indexes
WHERE object_id = OBJECT_ID('テーブル名')
AND name = 'インデックス名'
)
BEGIN
PRINT 'インデックス ' + 'インデックス名' + ' は存在します。'
END
ELSE
BEGIN
PRINT 'インデックス ' + 'インデックス名' + ' は存在しません。'
END
GO
これらの方法のいずれを使用しても、SQL Serverテーブルに特定のインデックスが存在するかどうかを簡単に確認できます。
-- テーブル "Customers" にインデックス "IX_Customers_LastName" が存在するかどうかを確認する
USE AdventureWorks2019;
GO
IF EXISTS (
SELECT *
FROM sys.indexes
WHERE object_id = OBJECT_ID('Customers')
AND name = 'IX_Customers_LastName'
)
BEGIN
PRINT 'インデックス IX_Customers_LastName は存在します。'
END
ELSE
BEGIN
PRINT 'インデックス IX_Customers_LastName は存在しません。'
END
GO
実行結果
インデックス IX_Customers_LastName は存在します。
- 上記のサンプルコードは、
sys.indexes
ビューを使用しています。他の方法を使用する場合は、クエリの変更が必要です。 - インデックスの名前がわからない場合は、SSMS のオブジェクトエクスプローラーを使用するか、
sys.indexes
ビューを直接クエリできます。
SQL Serverで特定のインデックスが存在するかどうかを確認するその他の方法
SELECT *
FROM sys.dm_db_index_operational_stats
WHERE object_id = OBJECT_ID('テーブル名')
AND index_id = INDEX_ID('インデックス名')
sp_helpindex
システムストアドプロシージャは、特定のテーブルのインデックスに関する情報を提供します。このプロシージャを使用して、特定のインデックスが存在するかどうかを確認するには、次のコマンドを実行します。
EXEC sp_helpindex 'テーブル名', 'インデックス名'
SSMS のインデックスのプロパティを使用する
SSMSを使用して、インデックスのプロパティを表示できます。インデックスのプロパティには、インデックスの名前、作成日時、インデックスに含まれるカラムなどの情報が含まれます。
- 目的のインデックスを右クリックし、[プロパティ] を選択します。
- [インデックスのプロパティ] ダイアログボックスが表示されます。
T-SQL スクリプトとエラー処理を使用する
USE [データベース名]
GO
BEGIN TRY
SELECT *
FROM sys.indexes
WHERE object_id = OBJECT_ID('テーブル名')
AND name = 'インデックス名'
END TRY
BEGIN CATCH
PRINT 'インデックス ' + 'インデックス名' + ' は存在しません。'
END CATCH
GO
sql-server