Wie finde ich die Größe einer Tabelle in SQL?
Antworten:
SQL Server:-
sp_spaceused 'TableName'
Oder im Management Studio: Klicken Sie mit der rechten Maustaste auf Tabelle -> Eigenschaften -> Speicher
MySQL: -
SELECT table_schema, table_name, data_length, index_length FROM information_schema.tables
Sybase: -
sp_spaceused 'TableName'
data_lengthdie Größe der Tabelle in Byte und nicht die Anzahl der Zeilen angegeben wird. Siehe: dev.mysql.com/doc/refman/8.0/en/tables-table.html
Durch die Kombination der Antworten aus den Posts von Ratty und Haim (einschließlich Kommentaren) habe ich mir Folgendes ausgedacht, das für SQL Server bisher das eleganteste zu sein scheint:
-- 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
Auf diese Weise erhalten Sie eine Liste aller Ihrer Tabellen in der Reihenfolge der reservierten Größe, sortiert vom größten zum kleinsten.
Eine Abfrage (Änderung von https://stackoverflow.com/a/7892349/1737819 ), um eine benutzerdefinierte Namenstabellengröße in GB zu ermitteln. Sie können dies versuchen und 'YourTableName' durch den Namen Ihrer Tabelle ersetzen.
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)) damit Informationen für Tabellen angezeigt werden, die kleiner als GB sind
SQL Server bietet eine integrierte gespeicherte Prozedur, mit der Sie die Größe einer Tabelle, einschließlich der Größe der Indizes, auf einfache Weise anzeigen können. Dies könnte Sie überraschen.
Syntax:
sp_spaceused ‘Tablename’
sehen in :
http://www.howtogeek.com/howto/database/determine-size-of-a-table-in-sql-server/
Und in 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;
Ich weiß, dass Sie in SQL 2012 (möglicherweise in anderen Versionen) Folgendes tun können:
Dadurch erhalten Sie eine Liste der 1000 besten Tabellen und können diese nach Datengröße usw. sortieren.
SQL Server, schön formatierte Tabelle für alle Tabellen in 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
Sie können die Antwort von Marc_s in einem anderen Thread verweisen, sehr nützlich.
Hier ist eine einfache Abfrage, wenn Sie nur versuchen, die größten Tabellen zu finden.
-- 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