Skip to content

Instantly share code, notes, and snippets.

@ghotz
Last active May 14, 2024 08:07
Show Gist options
  • Save ghotz/ff2f209d631b6c2c1b3351e779c53899 to your computer and use it in GitHub Desktop.
Save ghotz/ff2f209d631b6c2c1b3351e779c53899 to your computer and use it in GitHub Desktop.
Check SQL Server empty statistics
EXEC sp_msforeachdb 'USE [?];
SELECT
DB_NAME()
, S.[object_id], S.[stats_id]
, FORMATMESSAGE(
N''[%s].[%s]''
, OBJECT_SCHEMA_NAME(S.[object_id])
, OBJECT_NAME(S.[object_id])
)AS object_full_name
, QUOTENAME(S.[name]) AS stat_name
, COUNT(H.step_number) AS steps_count
, FORMATMESSAGE(
N''USE [%s]; UPDATE STATISTICS [%s].[%s] ([%s]) WITH FULLSCAN;''
, DB_NAME()
, OBJECT_SCHEMA_NAME(S.[object_id])
, OBJECT_NAME(S.[object_id])
, S.[name]
) AS update_stmt
FROM sys.stats AS S
JOIN sys.objects AS O ON S.[object_id] = O.[object_id]
OUTER
APPLY
sys.dm_db_stats_histogram(S.object_id, S.stats_id) AS H
WHERE
O.is_ms_shipped = 0
AND S.no_recompute = 0
AND S.is_temporary = 0
AND S.has_filter = 0
GROUP BY
S.[object_id], S.stats_id, S.[name]
HAVING COUNT(H.step_number) = 0
';
SELECT
DB_NAME()
, S.[object_id], S.[stats_id]
, FORMATMESSAGE(
N'[%s].[%s]'
, OBJECT_SCHEMA_NAME(S.[object_id])
, OBJECT_NAME(S.[object_id])
)AS object_full_name
, QUOTENAME(S.[name]) AS stat_name
, COUNT(H.step_number) AS steps_count
, FORMATMESSAGE(
N'USE [%s]; UPDATE STATISTICS [%s].[%s] ([%s]) WITH FULLSCAN;'
, DB_NAME()
, OBJECT_SCHEMA_NAME(S.[object_id])
, OBJECT_NAME(S.[object_id])
, S.[name]
) AS update_stmt
FROM sys.stats AS S
JOIN sys.objects AS O ON S.[object_id] = O.[object_id]
OUTER
APPLY
sys.dm_db_stats_histogram(S.object_id, S.stats_id) AS H
WHERE
O.is_ms_shipped = 0
AND S.no_recompute = 0
AND S.is_temporary = 0
AND S.has_filter = 0
GROUP BY
S.[object_id], S.stats_id, S.[name]
HAVING COUNT(H.step_number) = 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment