SQL Server 2005 で、一意の ID 列 (一意のインデックスを持つ) と主キーのクラスター化インデックスを持つテーブルに遭遇しました (したがって、この列には明示的に 2 つのインデックスがあります)。これは、このテーブルの挿入/更新/削除の主要なパフォーマンス要因ですか?
ずっと前に作成されたデータベースのパフォーマンスを向上させようとしていますが、そのような冗長な一意のインデックスを削除すると役立つのではないかと思います。データベースは、コンテンツが変更されるたびにこれらの両方のインデックスをチェック/再構築しますか? それとも、パフォーマンスの向上が小さすぎて、これを気にすることさえできませんか?
次に、インデックスの使用状況の出力例を示します。
INDEX UserSeeks UserScans UserLookups UserUpdates
--------------------------------------------------------
1_PK 45517046 42911 245353 0
1_UQ 45517046 42911 245353 0
1_Other 45517046 42911 245353 0
--------------------------------------------------------
2_PK 21538111 5685 231030 1121
2_UQ 21538111 5685 231030 1121
3_other 21538111 5685 231030 1121
そして、これがそのデータを取得するために使用したクエリです。
SELECT OBJECT_NAME(I.OBJECT_ID) AS ObjectName,
I.NAME AS IndexName,
S.user_seeks AS UserSeeks,
S.user_scans AS UserScans,
S.user_lookups AS UserLookups,
S.user_updates AS UserUpdates
FROM sys.indexes I
JOIN sys.dm_db_index_usage_stats S
ON (S.OBJECT_ID = I.OBJECT_ID)
WHERE(database_id = DB_ID())
そして、結合条件を修正しました:
SELECT OBJECT_NAME(I.OBJECT_ID) AS ObjectName,
I.NAME AS IndexName,
S.user_seeks AS UserSeeks,
S.user_scans AS UserScans,
S.user_lookups AS UserLookups,
S.user_updates AS UserUpdates
FROM sys.indexes I
JOIN sys.dm_db_index_usage_stats S
ON (S.OBJECT_ID = I.OBJECT_ID)
AND(S.index_id = I.index_id)
WHERE(database_id = DB_ID())