¿Cómo encontrar el tamaño de una tabla en SQL?


81

¿Cómo encontrar el tamaño de una tabla en SQL?


13
Depende del tipo de DBMS. Cual te interesa?
— codaddict

Respuestas:


110

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


Tenga en cuenta que para MySQL 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
— Ceasar Bautista

54

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.


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 / 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

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.

sp_spaceused ‘Tablename’


11

¿Por tamaño te refieres al número de registros en la tabla, por casualidad? En ese caso:

SELECT COUNT(*) FROM your_table_name

7

Y en PostgreSQL:

SELECT pg_size_pretty(pg_relation_size('tablename'));

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:

  1. Haga clic derecho en el nombre de la base de datos en el Explorador de objetos.
  2. 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.


También funciona en sql 2008 R2 ... :)
— manudea

3

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


2

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

2
¡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.
— Toby Speight
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.