Combinando las respuestas de las publicaciones de ratty y Haim (incluidos los comentarios), se me ocurrió esto, que para SQL Server parece ser el más elegante hasta ahora:
Iba a publicar este mismo script, esperemos que esté usando SQL Server.
SqlRyan
1
Excelente secuencia de comandos, excepto que debe leer LEN (...) - 3, no menos 4. Los valores vuelven así: "3746520 KB", por lo que son solo los últimos 3 caracteres los que deben cortarse. Pero ... ¡es genial ver cómo una publicación de hace 7 años es tan útil hoy como lo fue en 2010!
Mike Gledhill
conviértala en una tabla variable y no tendrá que soltarla. "declare @tmpTableSizes TABLE"
ARLibertarian
22
Una consulta (modificación de https://stackoverflow.com/a/7892349/1737819 ) para encontrar un tamaño de tabla de nombres personalizado en GB. Puede intentar esto, reemplace 'YourTableName' con el nombre de su tabla.
SELECT
t.NAME AS TableName,
p.rows AS RowCounts,
CONVERT(DECIMAL,SUM(a.total_pages)) * 8 / 1024 / 1024AS TotalSpaceGB,
SUM(a.used_pages) * 8 / 1024 / 1024AS UsedSpaceGB ,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 / 1024 / 1024AS UnusedSpaceGB
FROM
sys.tables t
INNERJOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNERJOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNERJOIN
sys.allocation_units a ON p.partition_id = a.container_id
LEFTOUTERJOIN
sys.schemas s ON t.schema_id = s.schema_id
WHERE
t.NAME = 'YourTable'AND t.is_ms_shipped = 0AND i.OBJECT_ID > 255GROUPBY
t.Name, s.Name, p.Rows
ORDERBY
UsedSpaceGB DESC, t.Name
Agregaría CONVERT(DECIMAL,SUM(a.total_pages)) para que mostrara información para tablas más pequeñas que GB
Bogdan Mart
21
SQL Server proporciona un procedimiento almacenado integrado que puede ejecutar para mostrar fácilmente el tamaño de una tabla, incluido el tamaño de los índices.
SQL Server proporciona un procedimiento almacenado integrado que puede ejecutar para mostrar fácilmente el tamaño de una tabla, incluido el tamaño de los índices ... lo que podría sorprenderlo.
por cierto, para ver los resultados de las eliminaciones con esta consulta, probablemente necesite aspirar. Aquí hay una consulta para ver todas las tablas públicas a la vez:SELECT table_name, pg_size_pretty(pg_relation_size(table_names.table_name)) AS size from (select table_name from information_schema.tables where table_schema = 'public') AS table_names ORDER BY pg_relation_size(table_names.table_name) DESC;
Noumenon
7
Sé que en SQL 2012 (puede funcionar en otras versiones) puede hacer lo siguiente:
Haga clic derecho en el nombre de la base de datos en el Explorador de objetos.
Seleccione Informes> Informes estándar> Uso de disco por tablas principales.
Eso le dará una lista de las 1000 tablas principales y luego podrá ordenarlas por tamaño de datos, etc.
¡Bienvenido a Stack Overflow! Aunque este código puede ayudar a resolver el problema, no explica por qué y / o cómo responde la pregunta. Proporcionar este contexto adicional mejoraría significativamente su valor educativo a largo plazo. Por favor, editar su respuesta para agregar explicación, incluyendo lo que se aplican limitaciones y supuestos. Sé que es una mala pregunta, esa es una razón más para ser clara en la respuesta.
Respuestas:
Servidor SQL:-
O en el estudio de administración: haga clic derecho en la tabla -> Propiedades -> Almacenamiento
MySQL: -
SELECT table_schema, table_name, data_length, index_length FROM information_schema.tables
Sybase: -
Oracle: - ¿cómo-puedo-calcular-el-tamaño-de-tablas-en-oracle
fuente
data_length
es el tamaño de la tabla en bytes, no el número de filas. Ver: dev.mysql.com/doc/refman/8.0/en/tables-table.htmlCombinando las respuestas de las publicaciones de ratty y Haim (incluidos los comentarios), se me ocurrió esto, que para SQL Server parece ser el más elegante hasta ahora:
-- DROP TABLE #tmpTableSizes CREATE TABLE #tmpTableSizes ( tableName varchar(100), numberofRows varchar(100), reservedSize varchar(50), dataSize varchar(50), indexSize varchar(50), unusedSize varchar(50) ) insert #tmpTableSizes EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'" select * from #tmpTableSizes order by cast(LEFT(reservedSize, LEN(reservedSize) - 4) as int) desc
Esto le brinda una lista de todas sus tablas en orden de tamaño reservado, ordenadas de mayor a menor.
fuente
Una consulta (modificación de https://stackoverflow.com/a/7892349/1737819 ) para encontrar un tamaño de tabla de nombres personalizado en GB. Puede intentar esto, reemplace 'YourTableName' con el nombre de su tabla.
SELECT t.NAME AS TableName, p.rows AS RowCounts, CONVERT(DECIMAL,SUM(a.total_pages)) * 8 / 1024 / 1024 AS TotalSpaceGB, SUM(a.used_pages) * 8 / 1024 / 1024 AS UsedSpaceGB , (SUM(a.total_pages) - SUM(a.used_pages)) * 8 / 1024 / 1024 AS UnusedSpaceGB 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 = 'YourTable' AND t.is_ms_shipped = 0 AND i.OBJECT_ID > 255 GROUP BY t.Name, s.Name, p.Rows ORDER BY UsedSpaceGB DESC, t.Name
fuente
CONVERT(DECIMAL,SUM(a.total_pages))
para que mostrara información para tablas más pequeñas que GBSQL Server proporciona un procedimiento almacenado integrado que puede ejecutar para mostrar fácilmente el tamaño de una tabla, incluido el tamaño de los índices.
fuente
SQL Server proporciona un procedimiento almacenado integrado que puede ejecutar para mostrar fácilmente el tamaño de una tabla, incluido el tamaño de los índices ... lo que podría sorprenderlo.
Sintaxis:
ver en :
http://www.howtogeek.com/howto/database/determine-size-of-a-table-in-sql-server/
fuente
¿Por tamaño te refieres al número de registros en la tabla, por casualidad? En ese caso:
SELECT COUNT(*) FROM your_table_name
fuente
Y en PostgreSQL:
SELECT pg_size_pretty(pg_relation_size('tablename'));
fuente
SELECT table_name, pg_size_pretty(pg_relation_size(table_names.table_name)) AS size from (select table_name from information_schema.tables where table_schema = 'public') AS table_names ORDER BY pg_relation_size(table_names.table_name) DESC;
Sé que en SQL 2012 (puede funcionar en otras versiones) puede hacer lo siguiente:
Eso le dará una lista de las 1000 tablas principales y luego podrá ordenarlas por tamaño de datos, etc.
fuente
SQL Server, tabla bien formateada para todas las tablas en KB / MB:
SELECT t.NAME AS TableName, s.Name AS SchemaName, p.rows AS RowCounts, SUM(a.total_pages) * 8 AS TotalSpaceKB, CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB, SUM(a.used_pages) * 8 AS UsedSpaceKB, CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB, (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB, CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB 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 t.Name
fuente
Puede consultar la respuesta de Marc_s en otro hilo, Muy útil.
Obtener el tamaño de todas las tablas en la base de datos
fuente
Aquí hay una consulta simple, si solo está tratando de encontrar las tablas más grandes.
-- Find largest table partitions SELECT top 20 obj.name, LTRIM (STR ( sz.in_row_data_page_count * 8, 15, 0) + ' KB') as Size, * FROM sys.dm_db_partition_stats sz inner join sys.objects obj on obj.object_id = sz.object_id order by sz.in_row_data_page_count desc
fuente