都内で働くSEの技術的なひとりごと / Technical soliloquy of System Engineer working in Tokyo

都内でサラリーマンやってます。SQL Server を中心とした (2023年からは Azure も。) マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。英語の勉強のため、英語の

SQL Server のチューニングについてまとめてみる - その8 - ( 未使用なインデックスを抽出してみる )

今回のやることを説明してみる

 未使用のインデックスが多く存在すると、追加・更新スピードなどに影響を及ぼします。よくあるクエリですが、未使用インデックスを抽出するクエリを作成したいと思います。

使用する環境を説明してみる

 Microsot Azure 上で 動作している Windows Server 2012 R2、SQL Server 2014 で動作確認をします。データベースは、AdventureWorks2012 を使用します。

実際にためしてみる

 未使用インデックスのクエリは下記の通りです。SQL Server Management Studio で実行してみましょう。

SELECT [スキーマ名] = s.name, 
[テーブル名] = t.name,
[インデックス名] = i.name,
[作成日] = t.create_date,
[修正日] = t.modify_date
FROM sys.indexes i
INNER JOIN sys.tables t
ON i.object_id = t.object_id
INNER JOIN sys.schemas s
ON t.schema_id = s.schema_id
WHERE i.index_id NOT IN ( SELECT ius.index_id
FROM sys.dm_db_index_usage_stats AS ius
WHERE ius.object_id = i.object_id
AND i.index_id = ius.index_id
)
ORDER BY [スキーマ名],[テーブル名],[インデックス名]

f:id:koogucc11:20140925110043p:plain

次回何をするのか宣言してみる

  調査用クエリは今後も作成し続けます!