SQL Server определяет физический размер столбцов таблицы
Можно ли узнать, насколько велики данные в КБ или МБ для отдельных столбцов в таблице? У меня есть script, который сообщает мне физический размер каждой таблицы, но я хотел бы знать, сколько из этого занимает некоторые столбцы в базе данных, особенно когда у меня есть XML, хранящийся в столбце.
Любая помощь очень ценится
Приветствия
Ответы
Ответ 1
Вы должны иметь возможность использовать функцию datalength, что-то вроде
select sum(datalength(yourfield))
from yourtable
Это суммирует длины данных всех записей этого поля в таблице - на него не будут налагаться накладные расходы, такие как указатели полей переменной длины, пробел в растровой картине с нулевым значением и т.д.
Ответ 2
Выберите SUM (DATALENGTH (columnsA))/1024.0 AS KB
Ответ 3
Это вернет все столбцы в конкретной базе данных с их размером данных и может быть легко обновлено, чтобы возвращать только числа для определенной таблицы или столбца.
USE [YourDatabase]
IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
CREATE TABLE #temp (tablename varchar(max), columnname varchar(max), sizeinkb float)
DECLARE MY_CURSOR Cursor LOCAL FAST_FORWARD
FOR SELECT table_name, column_name FROM INFORMATION_SCHEMA.COLUMNS
Open My_Cursor
DECLARE @table varchar(max), @column varchar(max)
Fetch NEXT FROM MY_Cursor INTO @table, @column
While (@@FETCH_STATUS <> -1)
BEGIN
DECLARE @sql varchar(1000) = 'INSERT #temp SELECT ''' + @table + ''', ''' + @column + ''', sum(datalength(' + @column + ')) / 1024.0 FROM ' + @table
EXEC (@sql)
FETCH NEXT FROM MY_CURSOR INTO @table, @column
END
CLOSE MY_CURSOR
DEALLOCATE MY_CURSOR
GO
SELECT * FROM #temp ORDER BY 3 DESC