Как узнать размер таблицы в SQL?
Ответы:
SQL Server: -
sp_spaceused 'TableName'
Или в студии управления: щелкните правой кнопкой мыши таблицу -> Свойства -> Хранилище.
MySQL: -
SELECT table_schema, table_name, data_length, index_length FROM information_schema.tables
Sybase: -
sp_spaceused 'TableName'
Oracle: - как-я-вычислить-размер-таблицы-в оракуле
data_lengthэто размер таблицы в байтах, а не количество строк. См .: dev.mysql.com/doc/refman/8.0/en/tables-table.html
Объединив ответы из сообщений ratty и Haim (включая комментарии), я придумал следующее, которое для SQL Server пока кажется наиболее элегантным:
-- 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
Это дает вам список всех ваших таблиц в порядке зарезервированного размера, от наибольшего к наименьшему.
Запрос (модификация https://stackoverflow.com/a/7892349/1737819 ), чтобы найти размер настраиваемой таблицы имен в ГБ. Вы можете попробовать это, заменив «YourTableName» на имя своей таблицы.
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)) чтобы он отображал информацию для таблиц размером меньше ГБ
SQL Server предоставляет встроенную хранимую процедуру, которую вы можете запустить, чтобы легко показать размер таблицы, включая размер индексов… что может вас удивить.
Синтаксис:
sp_spaceused ‘Tablename’
см. в:
http://www.howtogeek.com/howto/database/determine-size-of-a-table-in-sql-server/
А в 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;
Я знаю, что в SQL 2012 (может работать и в других версиях) вы можете делать следующее:
Это даст вам список из 1000 лучших таблиц, а затем вы сможете отсортировать его по размеру данных и т. Д.
SQL Server, красиво отформатированная таблица для всех таблиц в КБ / МБ:
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
Вы можете сослаться на ответ Marc_s в другой ветке, очень полезно.
Вот простой запрос, если вы просто пытаетесь найти самые большие таблицы.
-- 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