
Voici une requête qui retourne :
- Nom de la table
- Schéma
- Nombre de lignes
- Taille totale (données + index) en Mo
- Taille des données seules en Mo
- Taille des index en Mo
- Taille non allouée en Mo
SELECT
s.name AS SchemaName,
t.name AS TableName,
p.rows AS RowCounts,
CONVERT(DECIMAL(18,2), au.total_pages * 8 / 1024.0) AS TotalSizeMB,
CONVERT(DECIMAL(18,2), au.used_pages * 8 / 1024.0) AS UsedSizeMB,
CONVERT(DECIMAL(18,2), (au.used_pages - au.data_pages) * 8 / 1024.0) AS IndexSizeMB,
CONVERT(DECIMAL(18,2), (au.total_pages - au.used_pages) * 8 / 1024.0) AS UnusedSizeMB
FROM
sys.tables t
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
LEFT JOIN sys.indexes i ON t.object_id = i.object_id AND i.index_id IN (0,1)
LEFT JOIN sys.partitions p ON t.object_id = p.object_id AND i.index_id = p.index_id
LEFT JOIN sys.allocation_units au ON p.partition_id = au.container_id
WHERE
t.is_ms_shipped = 0
GROUP BY
s.name, t.name, p.rows, au.total_pages, au.used_pages, au.data_pages
ORDER BY
TotalSizeMB DESC;