timtownsend

Create new indexes in Microsoft SQL to improve database performance

Mar 12th, 2025 (edited)
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 2.74 KB | Fixit | 0 0
  1. SELECT db.[name] AS [DatabaseName]
  2.     ,id.[object_id] AS [ObjectID]
  3.     ,OBJECT_NAME(id.[object_id], db.[database_id]) AS [ObjectName]
  4.     ,id.[statement] AS [FullyQualifiedObjectName]
  5.     ,id.[equality_columns] AS [EqualityColumns]
  6.     ,id.[inequality_columns] AS [InEqualityColumns]
  7.     ,id.[included_columns] AS [IncludedColumns]
  8.     ,gs.[unique_compiles] AS [UniqueCompiles]
  9.     ,gs.[user_seeks] AS [UserSeeks]
  10.     ,gs.[user_scans] AS [UserScans]
  11.     ,gs.[last_user_seek] AS [LastUserSeekTime]
  12.     ,gs.[last_user_scan] AS [LastUserScanTime]
  13.     ,gs.[avg_total_user_cost] AS [AvgTotalUserCost]  -- Average cost of the user queries that could be reduced by the index in the group.
  14.     ,gs.[avg_user_impact] AS [AvgUserImpact]  -- The value means that the query cost would on average drop by this percentage if this missing index group was implemented.
  15.     ,gs.[system_seeks] AS [SystemSeeks]
  16.     ,gs.[system_scans] AS [SystemScans]
  17.     ,gs.[last_system_seek] AS [LastSystemSeekTime]
  18.     ,gs.[last_system_scan] AS [LastSystemScanTime]
  19.     ,gs.[avg_total_system_cost] AS [AvgTotalSystemCost]
  20.     ,gs.[avg_system_impact] AS [AvgSystemImpact]  -- Average percentage benefit that system queries could experience if this missing index group was implemented.
  21.     ,gs.[user_seeks] * gs.[avg_total_user_cost] * (gs.[avg_user_impact] * 0.01) AS [IndexAdvantage]
  22.     ,'CREATE INDEX [IX_' + OBJECT_NAME(id.[object_id], db.[database_id]) + '_' + REPLACE(REPLACE(REPLACE(ISNULL(id.[equality_columns], ''), ', ', '_'), '[', ''), ']', '') + CASE
  23.         WHEN id.[equality_columns] IS NOT NULL
  24.             AND id.[inequality_columns] IS NOT NULL
  25.             THEN '_'
  26.         ELSE ''
  27.         END + REPLACE(REPLACE(REPLACE(ISNULL(id.[inequality_columns], ''), ', ', '_'), '[', ''), ']', '') + '_' + LEFT(CAST(NEWID() AS [nvarchar](64)), 5) + ']' + ' ON ' + id.[statement] + ' (' + ISNULL(id.[equality_columns], '') + CASE
  28.         WHEN id.[equality_columns] IS NOT NULL
  29.             AND id.[inequality_columns] IS NOT NULL
  30.             THEN ','
  31.         ELSE ''
  32.         END + ISNULL(id.[inequality_columns], '') + ')' + ISNULL(' INCLUDE (' + id.[included_columns] + ')', '') AS [ProposedIndex]
  33.     ,CAST(CURRENT_TIMESTAMP AS [smalldatetime]) AS [CollectionDate]
  34. FROM [sys].[dm_db_missing_index_group_stats] gs WITH (NOLOCK)
  35. INNER JOIN [sys].[dm_db_missing_index_groups] ig WITH (NOLOCK) ON gs.[group_handle] = ig.[index_group_handle]
  36. INNER JOIN [sys].[dm_db_missing_index_details] id WITH (NOLOCK) ON ig.[index_handle] = id.[index_handle]
  37. INNER JOIN [sys].[DATABASES] db WITH (NOLOCK) ON db.[database_id] = id.[database_id]
  38. WHERE  db.[database_id] = DB_ID()
  39. --AND OBJECT_NAME(id.[object_id], db.[database_id]) = 'YourTableName'
  40. ORDER BY ObjectName, [IndexAdvantage] DESC
  41. OPTION (RECOMPILE);
Add Comment
Please, Sign In to add comment