Files
sql-scripts/DBG - idx usage with definition.sql
Thierry Schork 42fb2e851c cleanup
2023-01-05 11:32:51 +01:00

114 lines
3.6 KiB
SQL

/*
Server: ssunb008vm01.sunstore.ch
Format: GCM
Business: TPPHAR
type: DEVE
Version: 23.1.10016.00066
01.11.2022, TSC
*/
USE Arizona
;WITH ColInfo AS
( SELECT TblName = o.name
,SchemaTbl = s.name + '.' + o.name
,IndexName = i.name
,IsPrimaryKey = i.is_primary_key
,IsUniqueConstraint = i.is_unique_constraint
,IsUnique = i.is_unique
,ColName = c.name
,IsComputedCol = c.is_computed
,IsIncludedCol = ic.is_included_column
,ic.key_ordinal
,FilterDefinition = i.filter_definition
FROM sys.objects o
INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
INNER JOIN sys.columns c ON o.object_id = c.object_id
INNER JOIN sys.indexes i ON c.object_id = i.object_id
INNER JOIN sys.index_columns ic ON i.index_id = ic.index_id AND o.object_id = ic.object_id AND c.column_id = ic.column_id
)
--- Index Read/Write stats (all tables in current DB) ordered by Reads (Query 62) (Overall Index Usage - Reads)
SELECT tblName = o.name
,o.type
,i.name AS [IndexName]
,i.index_id
,user_seeks + user_scans + user_lookups AS [Reads]
,s.user_updates AS [Writes]
, CASE
WHEN s.user_updates > user_seeks + user_scans + user_lookups THEN s.user_updates - (user_seeks + user_scans + user_lookups)
ELSE (user_seeks + user_scans + user_lookups) - s.user_updates
END AS delta
,i.type_desc AS [IndexType]
,i.fill_factor AS [FillFactor]
,i.has_filter
,i.filter_definition
,s.last_user_scan
,s.last_user_lookup
,s.last_user_seek
,idx_cols.IndexColumns
,idx_cols.IncludedColumns
FROM sys.dm_db_index_usage_stats AS s WITH (NOLOCK)
INNER JOIN sys.indexes AS i WITH (NOLOCK) ON s.object_id = i.object_id
INNER JOIN sys.objects o WITH (NOLOCK) ON s.object_id = o.object_id
OUTER APPLY (
SELECT DISTINCT
x.TblName
,x.IndexName
,x.IsPrimaryKey
,x.IsUniqueConstraint
,x.IsUnique
--,size.IndexSizeKB
,c.IndexColumns
,ci.IncludedColumns
,cc.ComputedColumns
,x.FilterDefinition
FROM ColInfo x
CROSS APPLY(SELECT IndexColumns = STUFF(sq.strXML, 1, 2, '')
FROM ( SELECT ', ' + ISNULL(x2.ColName, '')
FROM ColInfo x2
WHERE x.TblName = x2.TblName AND x.IndexName = x2.IndexName AND x2.IsIncludedCol = 0
ORDER BY x2.key_ordinal
FOR XML PATH('')
) sq (strXML)
) c
Outer APPLY(SELECT IncludedColumns = STUFF(sq.strXML, 1, 2, '')
FROM ( SELECT ', ' + ISNULL(x2.ColName, '')
FROM ColInfo x2
WHERE x.TblName = x2.TblName AND x.IndexName = x2.IndexName AND x2.IsIncludedCol = 1
ORDER BY x2.key_ordinal
FOR XML PATH('')
) sq (strXML)
) ci
Outer APPLY(SELECT ComputedColumns = STUFF(sq.strXML, 1, 2, '')
FROM ( SELECT ', ' + ISNULL(x2.ColName, '')
FROM ColInfo x2
WHERE x.TblName = x2.TblName AND x.IndexName = x2.IndexName AND x2.IsComputedCol = 1
ORDER BY x2.key_ordinal
FOR XML PATH('')
) sq (strXML)
) cc
WHERE x.TblName = o.name
AND x.IndexName = i.name
)idx_cols
WHERE o.type = 'U' -- user table
AND i.index_id = s.index_id
AND s.database_id = DB_ID()
AND o.name = 'entry'
--AND i.name IN
-- (
-- N'NCIX_Entry_COL_ET_accounting_period',
-- N'NCIX_Entry_COL_ET_entry_type',
-- N'NCIX_Entry_COL_ET_predefined_entry',
-- N'NCIX_Entry_COL_ET_bmc_user_profile',
-- N'NCIX_Entry_COL_ET_currency',
-- N'NCIX_Entry_COL_ET_entry_address'
-- )
ORDER BY delta DESC
--ORDER BY user_seeks + user_scans + user_lookups DESC -- Order by reads
--ORDER BY s.user_updates DESC OPTION -- Order by writes
OPTION (RECOMPILE);