sys.dm_db_missing動的ビューを用いると不足していると思われるインデックスがわかる。
そのデータベース上で特にインデックスが不足していると推測されるものを探すSQLは以下の通り。
SELECT TOP 10 [Total Cost] = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0) , avg_user_impact , statement AS テーブル名 , equality_columns as 等号列 , inequality_columns as 不等号列 , included_columns as 付加列 FROM sys.dm_db_missing_index_groups g INNER JOIN sys.dm_db_missing_index_group_stats s ON s.group_handle = g.index_group_handle INNER JOIN sys.dm_db_missing_index_details d ON d.index_handle = g.index_handle ORDER BY [Total Cost] DESC;
上記でコストが高いものがあれば、等号列と不可等号列、付加列をINCLUDEに含めたインデックスを作成してみるとよい
CREATE NONCLUSTERED INDEX [tbl_IX01] ON [dbo].[tbl] ( [col1] ASC, [col2] ASC ) INCLUDE ( [col3], [col4], ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO
動作確認環境:SQL Server 2008