将char(1000)改为varchar(1000)表空间没变小反而变更大问题?

honggui 2008-05-16 12:14:22
因有一个表只有25万条数据,字段也才五个,数据长度不是很大,但表空间却有1G多?
后面我发现很多字段是用char,我全部改为varchar后,空间没小,反而更大了?
请问我改了类型后,还要做什么操作才能大大缩小表空间,请有经验人士帮我解答一下,多谢了!
...全文
224 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hery2002 2008-05-16
  • 打赏
  • 举报
回复
Mark一下下!:P
漂移~
zjcxc 2008-05-16
  • 打赏
  • 举报
回复
char 是固定长度, 不用额外的开销
varchar 是变长的, 额外还需要2个字节来反应字估中数据的存储情况

char 的尾部会自动填充空格直到达到定义的长度
char 改成 varchar 的时候, 这个尾部空格不会自动截掉


故 char 改成同样长度的 varchar 会增加空间开销
如果你确定你的 char 列很多数据达到到定义的长度(尾部有很多空格), 则需要在字段类型修改后:
1. 去掉字段的尾部空格. 用1楼的方法, 或者用 UPDATE .. SET col = RTRIM(col)
2. 重建聚集索引. 如果聚集索引不重建, 是数据页上的空间不会回收, 占用的空间只是可以被将来的数据行使用, 不会释放空间, 重建聚集索引可以重新组织数据, 从而释放空间
-狙击手- 2008-05-16
  • 打赏
  • 举报
回复
最后还可以重建索引试试,注意填充因子
-狙击手- 2008-05-16
  • 打赏
  • 举报
回复
注释
DBCC CLEANTABLE 收回用 ALTER TABLE DROP COLUMN 语句除去可变长度列或 text 列后的空间。而不收回固定长度列除去后的空间
-狙击手- 2008-05-16
  • 打赏
  • 举报
回复
参数
'database_name' | database_id

是将要清除的表所在的数据库。

'table_name' | table_id | 'view_name' | view_id

是要清除的表或视图。

batch_size

是每个事务处理的行数。如果未指定,则该语句用一个事务处理整个表。

-狙击手- 2008-05-16
  • 打赏
  • 举报
回复
DBCC CLEANTABLE
( { 'database_name' | database_id }
, { 'table_name' | table_id | 'view_name' | view_id }
[ , batch_size ]
)
srgcc 2008-05-16
  • 打赏
  • 举报
回复
Mark
utpcb 2008-05-16
  • 打赏
  • 举报
回复
char 是固定长度, 不用额外的开销
varchar 是变长的, 额外还需要2个字节来反应字估中数据的存储情况

char 的尾部会自动填充空格直到达到定义的长度
char 改成 varchar 的时候, 这个尾部空格不会自动截掉


故 char 改成同样长度的 varchar 会增加空间开销
如果你确定你的 char 列很多数据达到到定义的长度(尾部有很多空格), 则需要在字段类型修改后:
1. 去掉字段的尾部空格. 用1楼的方法, 或者用 UPDATE .. SET col = RTRIM(col)
2. 重建聚集索引. 如果聚集索引不重建, 是数据页上的空间不会回收, 占用的空间只是可以被将来的数据行使用, 不会释放空间, 重建聚集索引可以重新组织数据, 从而释放空间
dobear_0922 2008-05-16
  • 打赏
  • 举报
回复
学习一下,
honggui 2008-05-16
  • 打赏
  • 举报
回复
多谢:无枪狙击手和邹建 实用的方法,试了有用,再次非常感谢!
chenjunsheep 2008-05-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wzy_love_sly 的回复:]
Mark一下下!
[/Quote]
wzy_love_sly 2008-05-16
  • 打赏
  • 举报
回复
Mark一下下!
muzhenxing013 2008-05-16
  • 打赏
  • 举报
回复
。。。。。。。。。。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧