Сколько дискового пространства используют столбцы SQL - PullRequest
2 голосов
/ 22 июля 2011

Кто-нибудь знает ссылку, где я могу найти этот материал?Я работаю над предложением удалить целую кучу неиспользуемых столбцов из нескольких таблиц, и если бы я мог узнать объем используемого дискового пространства, это действительно помогло бы мне.

Например, еслиу меня есть таблица с 5,5 миллионами строк, сколько места я сэкономлю, если уроню столбец BIT / INT32 / DECIMAL (18,2)?

Это SQL Server 2008.

Спасибоеще раз!

Ответы [ 3 ]

2 голосов
/ 13 июля 2016

Этот кусок sql проходит через все ваши столбцы и дает вам совокупность их datalength().

Я понимаю, что это не совсем то, о чем спрашивал ОП, - это в пользу бедныхдуши, которые гуглили "используемое пространство столбца сервера sql" и находят этот вопрос.

Это также в моей сути здесь .

create table #space ([table] nvarchar(255), [column] nvarchar(255) not null, [bytes] bigint null);

declare @sql varchar(max) = ''
declare @tablepattern as varchar(255) = '%'
declare @exclusionpattern as varchar(255) = ''

select @sql = @sql + 'insert into #space select ''' + t.name + ''', ''' + c.name + ''', sum(datalength([' + c.name + '])) as bytes from [' + t.name + '];' 
from sys.columns c
inner join sys.tables t on c.object_id = t.object_id
where t.name like @tablepattern and t.name not like @exclusionpattern;

exec (@sql)

select [table], format(sum([bytes]), '#,#') as [size]
from #space
group by [table]
order by sum(bytes) desc;

select [table], [column], format([bytes], '#,#') as [size]
from [#space]
order by [bytes] desc;

drop table #space
2 голосов
/ 22 июля 2011

Существует большая разница между размещением столбца и реальной записью.

Для типов:

  • бит - это целое число, которое будет сгруппировано в один физический столбец (скажем, 4-байтовое целое число), если в записи имеется более одного битового столбца
  • int32 - занимает 4 байта
  • DECIMAL очень похож на структуру, описанную в http://msdn.microsoft.com/en-us/library/ms221061(v=VS.85).aspx (12 байт)

Но в реальном мире столбцы группируются для записи с некоторыми правилами выравнивания. Записи размещаются большими страницами, которые могут содержать тысячи записей. Дисковое пространство также зависит от журнала транзакций, который частично сохраняет некоторые записи. Поэтому сложно вывести линейную зависимость размера столбца.

1 голос
/ 22 июля 2011

Это на строку

Для чисел:

tinyint  1 byte
smallint 2 bytes
int      4 bytes
bigint   8 bytes

Bit агрегируется по записи, поэтому трудно сказать, не зная вашей структуры.Маловероятно, что сэкономит много.

DECIMAL будет зависеть от точности:

1 - 9   5 bytes
10 - 19 9 bytes
20 - 28 13 bytes
29 - 38 17 bytes
...