¿Cómo encontrar el tamaño de una tabla en SQL?
Respuestas:
Servidor SQL:-
sp_spaceused 'TableName'
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: -
sp_spaceused 'TableName'
Oracle: - ¿cómo-puedo-calcular-el-tamaño-de-tablas-en-oracle
data_lengthes 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.html
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:
-- 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.
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
CONVERT(DECIMAL,SUM(a.total_pages)) para que mostrara información para tablas más pequeñas que GB
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:
sp_spaceused ‘Tablename’
ver en :
http://www.howtogeek.com/howto/database/determine-size-of-a-table-in-sql-server/
Y en PostgreSQL:
SELECT pg_size_pretty(pg_relation_size('tablename'));
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.
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
Puede consultar la respuesta de Marc_s en otro hilo, Muy útil.
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