MrV*_*mes 20 sql-server types database-table
我有一个关于SQL Server 2005的表,大小约为4GB.
(约1700万条记录)
我将其中一个字段从数据类型更改char(30)为char(60)(总共有25个字段,其中大部分都是char(10)如此,因此字符空间的数量加起来大约为300)
这导致表格尺寸翻倍(超过9gb)
然后我更改了char(60)to varchar(60)然后运行了一个函数来从数据中删除额外的空格(以便将字段中数据的平均长度减少到大约15)
这并没有减少表的大小.收缩数据库也没有帮助.
实际上没有重新创建表格结构并复制数据(这是1700万条记录!)是否有一种不那么激烈的方式让尺寸再次缩小?
gbn*_*gbn 25
即使使用"缩小数据库",您也没有清理或压缩任何数据.
从表或索引视图中删除的可变长度列中回收空间.
但是,如果存在聚簇索引,则还应执行简单的索引重建
ALTER INDEX ALL ON dbo.Mytable REBUILD
Run Code Online (Sandbox Code Playgroud)
mar*_*c_s 17
嗯,很明显你没有得到任何空间!:-)
当您将文本字段更改为CHAR(60)时,它们都填充了空格容量.所以你的所有字段现在都是60个字符.
将其更改回VARCHAR(60)将无济于事 - 这些字段仍然是60个字符长....
您真正需要做的是在所有字段上运行TRIM函数以将它们缩减回修剪长度,然后进行数据库收缩.
完成后,您需要重新生成聚簇索引,以便回收一些浪费的空间.聚集索引实际上是数据所在的位置 - 您可以像这样重建它:
ALTER INDEX IndexName ON YourTable REBUILD
Run Code Online (Sandbox Code Playgroud)
默认情况下,主键是聚簇索引(除非您另行指定).
渣
| 归档时间: |
|
| 查看次数: |
49107 次 |
| 最近记录: |