Bonjour,
j'aimerais connaitre la taille des tables dans une base de données.
J'ai trouvé 2 requêtes qui donne le résultat:
- une avec la table sys.indexes, et spt_values
- l'autre avec la table sys.allocation_units
les voici:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SELECT t.NAME AS TableName, s.Name AS SchemaName, p.rows AS RowCounts, SUM(a.total_pages) * 8 AS TotalSpaceKB, SUM(a.used_pages) * 8 AS UsedSpaceKB, (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB 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 LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.NAME NOT LIKE 'dt%' AND t.is_ms_shipped = 0 AND i.OBJECT_ID > 255 GROUP BY t.Name, s.Name, p.Rows ORDER BY UsedSpaceKB DESCle résultat n'est pas le même, laquelle donne le résultat le plus cohérent ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 select TableName = convert(varchar(100),sysobjects.name) ,TotalRows = max(sysindexes.rows) ,MbData = (sum(convert(real,sysindexes.dpages)) * spt_values.low / 1048576) ,MbTotal = (sum(convert(real,sysindexes.used)) * spt_values.low / 1048576 ) from sysobjects join sysindexes on sysobjects.id = sysindexes.id join master.dbo.spt_values spt_values on spt_values.number = 1 and spt_values.type = 'E' where sysobjects.type = 'U' group by sysobjects.name, spt_values.low order by 4 desc
Merci,
Teddy
Partager