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:
Ich wollte genau dieses Skript veröffentlichen - hoffen wir, dass er SQL Server verwendet.
SqlRyan
1
Ausgezeichnetes Skript - außer es sollte LEN (...) - 3, nicht minus 4 lauten. Die Werte kommen wie folgt zurück: "3746520 KB", also müssen nur die letzten 3 Zeichen abgeschnitten werden. Aber ... cool zu sehen, wie nützlich ein Beitrag von vor 7 Jahren heute ist wie 2010 !!
Mike Gledhill
Machen Sie es zu einer variablen Tabelle und Sie müssen es nicht löschen. "@tmpTableSizes TABLE deklarieren"
ARLibertarian
22
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 / 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
Ich würde hinzufügen, CONVERT(DECIMAL,SUM(a.total_pages)) damit Informationen für Tabellen angezeigt werden, die kleiner als GB sind
Bogdan Mart
21
SQL Server bietet eine integrierte gespeicherte Prozedur, mit der Sie die Größe einer Tabelle, einschließlich der Größe der Indizes, einfach anzeigen können
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.
Übrigens, um Ergebnisse von Löschungen mit dieser Abfrage zu sehen, müssen Sie wahrscheinlich staubsaugen. Hier ist eine Abfrage, um alle öffentlichen Tabellen auf einmal zu sehen: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
Ich weiß, dass Sie in SQL 2012 (möglicherweise in anderen Versionen) Folgendes tun können:
Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf den Datenbanknamen.
Wählen Sie Berichte> Standardberichte> Datenträgernutzung nach Top-Tabellen.
Dadurch erhalten Sie eine Liste der 1000 besten Tabellen und können diese nach Datengröße usw. sortieren.
Willkommen bei Stack Overflow! Obwohl dieser Code zur Lösung des Problems beitragen kann, erklärt er nicht, warum und / oder wie er die Frage beantwortet. Die Bereitstellung dieses zusätzlichen Kontextes würde den langfristigen Bildungswert erheblich verbessern. Bitte bearbeiten Sie Ihre Antwort, um eine Erklärung hinzuzufügen, einschließlich der Einschränkungen und Annahmen. Ich weiß, dass es eine schlechte Frage ist - das ist noch mehr Grund, in der Antwort klar zu sein.
Antworten:
SQL Server:-
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: -
Oracle: - Wie-berechne-ich-Tabellen-Größe-in-Orakel
quelle
data_length
die 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.htmlDurch 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.
quelle
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
quelle
CONVERT(DECIMAL,SUM(a.total_pages))
damit Informationen für Tabellen angezeigt werden, die kleiner als GB sindSQL Server bietet eine integrierte gespeicherte Prozedur, mit der Sie die Größe einer Tabelle, einschließlich der Größe der Indizes, einfach anzeigen können
quelle
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:
sehen in :
http://www.howtogeek.com/howto/database/determine-size-of-a-table-in-sql-server/
quelle
Meinen Sie mit Größe zufällig die Anzahl der Datensätze in der Tabelle? In diesem Fall:
SELECT COUNT(*) FROM your_table_name
quelle
Und in PostgreSQL:
SELECT pg_size_pretty(pg_relation_size('tablename'));
quelle
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.
quelle
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
quelle
Sie können die Antwort von Marc_s in einem anderen Thread verweisen, sehr nützlich.
Ruft die Größe aller Tabellen in der Datenbank ab
quelle
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
quelle