Command to find Table size

Command to find Table size 

Below Command will provide you output of each table (Table size,index size)
This command gives you same output  Reports---> Standard Reports ---> Disk usages by top tables

CREATE TABLE #temp (
table_name sysname ,
row_count INT ,
reserved_size VARCHAR (50),
data_size VARCHAR (50),
index_size VARCHAR (50),
unused_size VARCHAR (50))
SET NOCOUNT ON
INSERT #temp 
exec sp_MSforeachtable " exec sp_spaceused '?' "
SELECT a.table_name,
a.row_count,
COUNT (*) AS col_count,
a.reserved_size,
a.data_size,
a.index_size,
a.unused_size
FROM #temp a
INNER JOIN information_schema.columns b
ON a.table_name collate database_default
= b.table_name collate database_default
GROUP BY a.table_name, a.row_count,a.reserved_size, a.data_size , a.index_size,a.unused_size
ORDER BY CAST ( REPLACE (a.reserved_size, ' KB' , '' ) AS float ) DESC
DROP TABLE #temp

OUTPUT:

-----------------------------------------------------------------------------------------------------------
Below Command will provide you output of each table excluding index

SELECT 
t.NAME AS TableName,
p.[Rows],
sum(a.total_pages) as TotalPages, 
sum(a.used_pages) as UsedPages, 
sum(a.data_pages) as DataPages,
(sum(a.total_pages) * 8) / 1024 as TotalSpaceMB, 
(sum(a.used_pages) * 8) / 1024 as UsedSpaceMB, 
(sum(a.data_pages) * 8) / 1024 as DataSpaceMB
FROM 
sys.tables t
INNER JOIN      
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN 
sys.allocation_units a ON p.partition_id = a.container_id
WHERE 
t.NAME NOT LIKE 'dt%' AND
i.OBJECT_ID > 255 AND   
i.index_id <= 1
GROUP BY 
t.NAME, i.object_id, i.index_id, i.name, p.[Rows]
ORDER BY 
p.[rows] desc;


OUTPUT:

No comments:

Post a Comment