Azure SQL Database に自動チューニングというのがあって、たくさんクエリーを投げると、パフォーマンスを改善するインデックスを特定し、自動で作成してくれる。ある程度はエンジニアで試行錯誤しながら事前にインデックスを作成できるが、それだけでなく、実際に運用に投入してから実際によくつかわれるクエリから勝手に作ってくれる。
かなり便利なんだけど、いったいどのカラムにどういったインデックスを作成してくれたのかを知りたくなったので、調べてみた。
SQL Serverではデータベースやデータベースサーバーに関する情報を提供するカタログビューというものがあり、その中にインデックスやテーブルの情報を持つビューがある。
それらを組み合わせることで、インデックスの名前とそれに関連するカラム名の一覧を取ることができる。
実際に使ったクエリ
SELECT
indx.name -- インデックス名
, clmns.name -- インデックスのカラム名
FROM sys.index_columns AS indx_clmns
JOIN sys.indexes AS indx
ON indx_clmns.object_id = indx.object_id AND indx.index_id = indx_clmns.index_id
JOIN sys.columns AS clmns
ON indx.object_id = clmns.object_id AND indx_clmns.column_id = clmns.column_id
WHERE indx.object_id = OBJECT_ID('dbo.users')