2011-07-22 7 views
2

を使うのですか誰が、私はこのようなものを見つけることができ、リンクを知っていますか?私はいくつかのテーブルから使用されていないカラムをたくさん落とすという提案をしています。使用するディスク容量を知ることができれば、本当に私を助けてくれるはずです。例えばは、どのくらいのディスク容量SQL列が

私は550万行を持つテーブルがある場合、私はBIT/INT32/DECIMAL(18,2)の列を削除した場合、私はどのくらいのスペースを節約するのだろうか?

これは、2008年

おかげで再びSQL Serverです!

+0

私は「問題のテーブルから列をドロップし、データベースのコピーを作成し、サイズ違いを取る、」言うが、データベースが、その大きさである場合には、おそらく多少実行不可能だろうと思います。 – JAB

+0

ええ、それはちょっと私の代替計画です。私が持っている問題は、私たちの "開発"データベースは、私たちのプロダクションのダウンしたバージョンであるということです。開発の曲は1 GB、実際の制作は5 GBまたは6 GBに近い –

答えて

2

列と実際のレコード割り当ての間には大きな違いがあります。タイプについて

  • ビットは - あなたは、レコード
  • INT32に複数のビット列を持っている場合、単一の物理列(4バイトの整数を言う)にグループ化されます整数である - 4つのバイトを取ります
  • DECIMALはhttp://msdn.microsoft.com/en-us/library/ms221061(v=VS.85).aspx(12バイト)で説明した構造に非常に似ている

しかし、現実の世界では列は、いくつかのアライメントルールで記録するためにグループ化されています。レコードは、1000ページのレコードを含む大きなページによって割り当てられます。ディスクスペースは、トランザクションジャーナルの影響を受けます。これは、一部のレコードを一部保存します。したがって、列サイズの線形依存性を推定することは困難です。

1

これは、行ごとに数値については

である:それはあなたの構造を知らずに言うのは難しいですので

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

Bitは、レコード全体で集約されます。多くを節約することはまずありません。

DECIMALは精度に依存します:SQLのこの作品は、すべての列の上に行くと、あなたに彼らのdatalength()の集計を与える

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

私はこれがOPが求めていたこととまったく同じではないことを認識しています。これはGoogleの「SQL Serverのカラムスペースが使用されている」という貧しい人々の利益のためです。

それはmy gist hereでもあります。

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 
関連する問題