删除变长列字段后使用DBCC CLEANTABLE回收空间
SQL Server在删除变长列或者减小变长列的长度后,表的大小不会响应自动减小,除非DBA重建索引或者reorganized索引。变长列包括varchar,nvarchar, varchar(max), nvarchar(max), varbinary, varbinary(max), text, ntext,image, sql_variant,和xml。
SQL Server提供了一个DBCCCLEANTABLE的命令可以回收表或索引视图中已删除的可变长度列的空间。
下面我们做个测试:
1. --创建测试表
CREATE TABLE testfreespace
( column1 INT
,column2 CHAR(20)
,column3 VARCHAR(8000))
2. --插入数据
DECLARE @count INT;
SET @count = 0;
WHILE @count < 3000
BEGIN
SELECT
@count = @count + 1;
INSERT into testfreespaceVALUES( @count,'test row # '+CAST(@countASVARCHAR(10)),REPLICATE('TestData', 3000)) ;
END
3. --查看使用空间使用情况
SELECT
alloc_unit_type_desc,
page_count,
avg_page_space_used_in_percent,
record_count
FROM sys.dm_db_index_physical_stats(DB_ID('FNDBLogtest'),OBJECT_ID(N'Testfreespace'),NULL,NULL,'Detailed')
结果:
alloc_unit_type_desc page_count avg_page_space_used_in_percent record_count
-------------------------------------------------------------------------------- ------------------------------ --------------------
IN_ROW_DATA 3000 99.2710649864097 3000
(1 row(s) affected)
4. --删除变长列Column3
ALTER TABLETestfreespaceDROPCOLUMNColumn3
5. 使用3脚本查询看到avg_page_space_used_in_percent仍然是99.2710649864097 没有改变。
6. --执行DBCC CLEANTABLE
DBCC CLEANTABLE(FNDBLogTest,"Testfreespace")
7. 再次运行3脚本看到下面的结果:
alloc_unit_type_desc page_count avg_page_space_used_in_percentrecord_count
-------------------------------------------------------------------------------- ------------------------------ --------------------
IN_ROW_DATA 3000 0.382999752903385 3000
(1 row(s) affected)
可以看到现在avg_page_space_used_in_percent已经变了,证明空间已经释放。
更多信息参考:DBCCCLEANTABLE (Transact-SQL)http://msdn.microsoft.com/zh-cn/library/ms174418.aspx
本文出自 “关注SQL Server技术” 博客,请务必保留此出处http://lzf328.blog.51cto.com/1196996/960310
删除变长列字段后使用DBCC CLEANTABLE回收空间的更多相关文章
- SQL Server如何在变长列上存储索引
这篇文章我想谈下SQL Server如何在变长列上存储索引.首先我们创建一个包含变长列的表,在上面定义主键,即在上面定义了聚集索引,然后往里面插入80000条记录: -- Create a new t ...
- sql 如何删除(代替)字段内某一部分内容
方法一(此方法既可用于删除某一列字段中的某部分字符,也可用于替换某一列字段中的某部分字符) update Table_Name set Column_Name=replace(Column_Name, ...
- C++中的变长参数
新参与的项目中,为了使用共享内存和自定义内存池,我们自己定义了MemNew函数,且在函数内部对于非pod类型自动执行构造函数.在需要的地方调用自定义的MemNew函数.这样就带来一个问题,使用stl的 ...
- mysql变成类型字段varchar值更新变长或变短底层文件存储原理
为了搞清楚MySQL对于可变长度字段值修改时,如何高效操作数据文件的机制.之前一直模糊不清,网上也搜不到现成的答案.经过多方资料搜集整理.写出此文供大家一起参阅.由于涉及众多非常底层的知识,我假设读者 ...
- 解决由于服务器调用删除或添加字段后CXF客户端未更新导致异常问题org.apache.cxf.interceptor.Fault: Unmarshalling Error: Unexpected element
采用CXF客户端调用Webservice服务,由于服务端时不时会对Webservice服务删除或添加一些字段,而CXF未及时更新客户端代码导致再次调用服务时报异常错误: Interceptor for ...
- oracle:变长数组varray,嵌套表,集合
创建变长数组类型 ) ); 这个变长数组最多可以容纳两个数据,数据的类型为 varchar2(50) 更改元素类型的大小或精度 可以更改变长数组类型和嵌套表类型 元素的大小. ALTER TYPE ...
- PL/SQL 嵌套表变长数组和索引表[转]
关于PL/SQL中这三种数组的介绍,不想写了.转一篇日志吧…… 链接:http://www.blogjava.net/decode360/archive/2008/08/08/280825.html ...
- SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL, ...
- paip.解决 数据库mysql增加列 字段很慢添加字段很慢
paip.解决 数据库mysql增加列 字段很慢添加字段很慢 #环境如下: mysql5.6 数据仅仅3w alter table xxx add column yyy int default ...
随机推荐
- 百度地图 获取两点坐标之间的驾车距离(非直线距离) c#
百度接口了解: http://lbsyun.baidu.com/index.php?title=webapi/route-matrix-api-v2 起点与终点为多对多关系,如果你只想取两个坐标,那就 ...
- swift-UserDefaults控制账号和密码
import UIKit class FiveVC: UIViewController { //MARK:-------- 全局 常量 设置 let IsFirstLaunch = "IsF ...
- Onethink1.1 钩子和插件的使用!
Onethink下载请自行百度咯,安装也就几秒钟. 高手(略),只是针对和我一样需要了解的菜鸟. 主要讲一讲onethink插件的使用,因为这对我们的快速开发有帮助,所以记录一下,同时也希望能够帮助一 ...
- A Taxonomy of Computer Organizations
COMPUTER OR GANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION
- 加快ArcGIS Server创建缓存速度,CachingTools的实例数
大比例尺的缓存,由于文件非常大,创建非常花费时间,在硬件设备已固定的情况下,调整Caching tools的实例数是加快创建缓存的方法之一. 简单来说:CachingTools的最大并行实例数决定了C ...
- SMTP Error: Could not connect to SMTP host
PHPMailer是一个非常棒的开源邮件类,使用也非常简单,但是对于虚拟主机来说,往往要受到各种限制.刚才我在虚拟主机上使用PHPMailer就遇到一个“SMTP Error: Could not c ...
- rabbitmq method之basic.consume
basic.consume指的是channel在 某个队列上注册消费者,那在这个队列有消息来了之后,就会把消息转发到给此channel处理,如果 这个队列有多个消费者,则会采用轮转的方式将消息分发给消 ...
- Linux一些零碎
1.设置时间和市区 1.tzselect 2.sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- Golang Import使用入门
我们在写Go代码的时候经常用到import这个命令用来导入包文件,而我们经常看到的方式参考如下: import( "fmt" ) 然后我们代码里面可以通过如下的方式调用 fmt.P ...
- JSON例子异常分析
今天自己写了一个JSON的例子,可以一调用就出了问题,报下面这个异常: Java.lang.ClassNotFoundException: org.apache.commons.lang.except ...