Skip to content

Commit 9ad90fb

Browse files
authored
Merge pull request BrentOzarULTD#3927 from BrentOzarULTD/copilot/fix-math-error-over-indexing-warning
sp_BlitzIndex: compute check_id 21 unused-index percent/space per database
2 parents 4bab99a + 18ba33c commit 9ad90fb

1 file changed

Lines changed: 16 additions & 24 deletions

File tree

sp_BlitzIndex.sql

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5182,28 +5182,6 @@ BEGIN
51825182
RAISERROR(N'@Mode=4, running rules for priorities 101+.', 0,1) WITH NOWAIT;
51835183

51845184
RAISERROR(N'check_id 21: More Than 5 Percent NC Indexes Are Unused', 0,1) WITH NOWAIT;
5185-
DECLARE @percent_NC_indexes_unused NUMERIC(29,1);
5186-
DECLARE @NC_indexes_unused_reserved_MB NUMERIC(29,1);
5187-
5188-
SELECT @percent_NC_indexes_unused = ( 100.00 * SUM(CASE
5189-
WHEN total_reads = 0
5190-
THEN 1
5191-
ELSE 0
5192-
END) ) / COUNT(*),
5193-
@NC_indexes_unused_reserved_MB = SUM(CASE
5194-
WHEN total_reads = 0
5195-
THEN sz.total_reserved_MB
5196-
ELSE 0
5197-
END)
5198-
FROM #IndexSanity i
5199-
JOIN #IndexSanitySize sz ON i.index_sanity_id = sz.index_sanity_id
5200-
WHERE index_id NOT IN ( 0, 1 )
5201-
AND i.is_unique = 0
5202-
/*Skipping tables created in the last week, or modified in past 2 days*/
5203-
AND i.create_date < DATEADD(dd,-7,GETDATE())
5204-
AND i.modify_date < DATEADD(dd,-2,GETDATE())
5205-
OPTION ( RECOMPILE );
5206-
IF @percent_NC_indexes_unused >= 5
52075185
INSERT #BlitzIndexResults ( check_id, index_sanity_id, Priority, findings_group, finding, [database_name], URL, details, index_definition,
52085186
secret_columns, index_usage_summary, index_size_summary )
52095187
SELECT 21 AS check_id,
@@ -5213,8 +5191,8 @@ BEGIN
52135191
N'More Than 5 Percent NC Indexes Are Unused' AS finding,
52145192
[database_name] AS [Database Name],
52155193
N'https://www.brentozar.com/go/IndexHoarder' AS URL,
5216-
CAST (@percent_NC_indexes_unused AS NVARCHAR(30)) + N' percent NC indexes (' + CAST(COUNT(*) AS NVARCHAR(10)) + N') unused. ' +
5217-
N'These take up ' + CAST (@NC_indexes_unused_reserved_MB AS NVARCHAR(30)) + N'MB of space.' AS details,
5194+
CAST (MAX(perc.percent_NC_indexes_unused) AS NVARCHAR(30)) + N' percent NC indexes (' + CAST(COUNT(*) AS NVARCHAR(10)) + N') unused. ' +
5195+
N'These take up ' + CAST (MAX(perc.NC_indexes_unused_reserved_MB) AS NVARCHAR(30)) + N'MB of space.' AS details,
52185196
i.database_name + ' (' + CAST (COUNT(*) AS NVARCHAR(30)) + N' indexes)' AS index_definition,
52195197
'' AS secret_columns,
52205198
CAST(SUM(total_reads) AS NVARCHAR(256)) + N' reads (ALL); '
@@ -5229,12 +5207,26 @@ BEGIN
52295207
END AS index_size_summary
52305208
FROM #IndexSanity i
52315209
JOIN #IndexSanitySize sz ON i.index_sanity_id = sz.index_sanity_id
5210+
JOIN (
5211+
SELECT i.database_name,
5212+
CAST((100.00 * SUM(CASE WHEN total_reads = 0 THEN 1 ELSE 0 END)) / COUNT(*) AS NUMERIC(29,1)) AS percent_NC_indexes_unused,
5213+
CAST(SUM(CASE WHEN total_reads = 0 THEN sz.total_reserved_MB ELSE 0 END) AS NUMERIC(29,1)) AS NC_indexes_unused_reserved_MB
5214+
FROM #IndexSanity i
5215+
JOIN #IndexSanitySize sz ON i.index_sanity_id = sz.index_sanity_id
5216+
WHERE index_id NOT IN ( 0, 1 )
5217+
AND i.is_unique = 0
5218+
/*Skipping tables created in the last week, or modified in past 2 days*/
5219+
AND i.create_date < DATEADD(dd,-7,GETDATE())
5220+
AND i.modify_date < DATEADD(dd,-2,GETDATE())
5221+
GROUP BY i.database_name
5222+
) AS perc ON i.database_name = perc.database_name
52325223
WHERE index_id NOT IN ( 0, 1 )
52335224
AND i.is_unique = 0
52345225
AND total_reads = 0
52355226
/*Skipping tables created in the last week, or modified in past 2 days*/
52365227
AND i.create_date < DATEADD(dd,-7,GETDATE())
52375228
AND i.modify_date < DATEADD(dd,-2,GETDATE())
5229+
AND perc.percent_NC_indexes_unused >= 5
52385230
GROUP BY i.database_name
52395231
OPTION ( RECOMPILE );
52405232

0 commit comments

Comments
 (0)