Please find below a collection of the scripts and tools I have done up to audit the SQL Server and it's databases.
Indexing Audit
To see an audit of the indexing state of the database, run this script.
----------------------------------------------------------------------------------------------------------------------------------------------------
-- DATABASE AUDIT SCRIPTS - INDEXING
-- Created By: Matthew Senz
-- Description: Returns an audit and evaluation of the indexing state of the selected database
-- Website: http://help.senzdigital.com
----------------------------------------------------------------------------------------------------------------------------------------------------
-- Use Database Declaration (Please set before running)
USE AdventureWorks2017;
-- Declare Variables and settings
SET NOCOUNT ON;
DECLARE @CurrentDatabase varchar(1000) = (SELECT DB_NAME());
SELECT SUM(CASE WHEN I.[type_desc]='CLUSTERED' THEN 1 ELSE 0 END) as [Clustered Index Count],
SUM(CASE WHEN I.[type_desc]='HEAP' THEN 1 ELSE 0 END) as [Heap Count],
ROUND(CAST(SUM(CASE WHEN I.[type_desc]='CLUSTERED' THEN 1 ELSE 0 END) as real)/COUNT(1)*100,2) as [Percentage Indexed],
CASE
WHEN ROUND(CAST(SUM(CASE WHEN I.[type_desc]='CLUSTERED' THEN 1 ELSE 0 END) as real)/COUNT(1)*100,0)<50 THEN 'Very Bad'
WHEN ROUND(CAST(SUM(CASE WHEN I.[type_desc]='CLUSTERED' THEN 1 ELSE 0 END) as real)/COUNT(1)*100,0) BETWEEN 50 AND 70 THEN 'Bad'
WHEN ROUND(CAST(SUM(CASE WHEN I.[type_desc]='CLUSTERED' THEN 1 ELSE 0 END) as real)/COUNT(1)*100,0) BETWEEN 71 AND 98 THEN 'Good'
WHEN ROUND(CAST(SUM(CASE WHEN I.[type_desc]='CLUSTERED' THEN 1 ELSE 0 END) as real)/COUNT(1)*100,0)>98 THEN 'Excellent'
END as [Indexing Evaluation]
FROM [sys].[tables] AS T
INNER JOIN [sys].[indexes] AS I ON I.[object_id] = T.[object_id] and I.[index_id] < 2
LEFT OUTER JOIN [sys].[schemas] AS S ON T.[schema_id] = S.[schema_id]
LEFT OUTER JOIN [sys].[data_spaces] AS D ON D.[data_space_id] = I.[data_space_id]
;
SELECT S.[name] as [Schema],
T.[name] as [Table],
I.[type_desc] as [Index]
FROM [sys].[tables] AS T
INNER JOIN [sys].[indexes] AS I ON I.[object_id] = T.[object_id] and I.[index_id] < 2
LEFT OUTER JOIN [sys].[schemas] AS S ON T.[schema_id] = S.[schema_id]
LEFT OUTER JOIN [sys].[data_spaces] AS D ON D.[data_space_id] = I.[data_space_id]
;