社区
疑难问题
帖子详情
将char(1000)改为varchar(1000)表空间没变小反而变更大问题?
honggui
2008-05-16 12:14:22
因有一个表只有25万条数据,字段也才五个,数据长度不是很大,但表空间却有1G多?
后面我发现很多字段是用char,我全部改为varchar后,空间没小,反而更大了?
请问我改了类型后,还要做什么操作才能大大缩小表空间,请有经验人士帮我解答一下,多谢了!
...全文
224
13
打赏
收藏
将char(1000)改为varchar(1000)表空间没变小反而变更大问题?
因有一个表只有25万条数据,字段也才五个,数据长度不是很大,但表空间却有1G多? 后面我发现很多字段是用char,我全部改为varchar后,空间没小,反而更大了? 请问我改了类型后,还要做什么操作才能大大缩小表空间,请有经验人士帮我解答一下,多谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
。。。。。。。。。。
将
char
(
1000
)
改为
var
char
(
1000
)
表空间
没
变小
反而
变更
大
问题
将
char
(
1000
)
改为
var
char
(
1000
)
表空间
没
变小
反而
变更
大
问题
原因:
char
是固定长度, 不用额外的开销
var
char
是变长的, 额外还需要2个字节来反应字估中数据的存储情况
char
的尾部会自动填充空格直到达到定义的...
SQL数据库中
char
,
var
char
, n
var
char
的差异
1.
char
固定长度,最长n个字符。 2.
var
char
最大长度为n的可变字符串。...(n为某一整数,不同数据库,最大长度n不同) ... 说
var
char
比
char
节省空间,是因为
var
char
是可变字符串,比如:用
var
char
(5...
ORACLE中
CHAR
、
VAR
CHAR
、N
VAR
CHAR
1.
char
固定长度,最长n个字符。 2.
var
char
最大长度为n的可变字符串。...(n为某一整数,不同数据库,最大长度n不同) ... 说
var
char
比
char
节省空间,是因为
var
char
是可变字符串,比如:用
var
char
(5...
数据库中
char
,
var
char
, n
var
char
的差异
1.
char
固定长度,最长n个字符。 2.
var
char
... 最大长度为n的可变字符串。...(n为某一整数,不同数据库,最大长度n不同) ... 说
var
char
比
char
节省空间,是因为
var
char
是可变字符串,比如:用
var
char
...
char
,
var
char
,n
var
char
区别
1.
char
固定长度,最长n个字符。 ...2.
var
char
... 最大长度为n的可变字符串。...(n为某一整数,不同数据库,最大长度n不同) ...
char
和
var
char
区别: ... 说
var
char
比
char
节省空间,是因为
var
char
疑难问题
22,209
社区成员
121,730
社区内容
发帖
与我相关
我的任务
疑难问题
MS-SQL Server 疑难问题
复制链接
扫一扫
分享
社区描述
MS-SQL Server 疑难问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章