当你创建了一个对象如表以后,不管你有没有插入数据,它都会占用一些块,ORACLE也会给它分配必要的空间.同样,用ALTER TABLE MOVE释放自由空间后,还是保留了一些空间给这个表.
ALTER TABLE ... MOVE 后面不跟参数也行,不跟参数表还是在原来的表空间,Move后记住重建索引.
查询失效索引语句:select index_name,table_name,tablespace_name,status From dba_indexes Where owner='HNUNICOM' And status<>'VALID'
重建索引语句:alter index INDEX_NAME rebuild tablespace TABLESPACE_NAME
如果以后还要继续向这个表增加数据,没有必要move,只是释放出来的空间,只能这个表用,其他的表或者segment无法使用该空间。
2. 执行alter table table_name shrink space(已经验证成功,推荐使用,可释放数据库和磁盘空间空间,大表可同时降低表自身和表空间的高水位线,小表则只可以降低表自身的高水位线,原因不详)
注意,此命令为Oracle 10g新增功能,执行该指令之前必须允许行移动 alter table table_name enable row movement
3. 复制要保留的数据到临时表t,drop原表,然后rename临时表t为原表(未验证
4. 用EXP导出后,删除原表/表空间,之后用IMP重新导入(验证成功)
5. Alter table table_name deallocate unused(验证不可行,不降低水位线)
注:这证明,DEALLOCATE UNUSED为释放HWM上面的未使用空间,但是并不会释放HWM下面的自由空间,也不会移动HWM的位置.
6. 尽量使用truncate(验证不可行,不降低水位线,可释放数据库空间,但truncate后表默认空间大小为删除前的空间大小,如想释放计算机磁盘空间,需要用方法2压缩)
解决delete后查询的性能问题,如何清理碎片,降低高水位?对于oracle,我知道delete后高水位不会下降,也就是说对于查询性能影响比较大。
对于sqlserver,是否也有这种问题?如果降低高水位。导入导出肯定可以,但是对于在线系统,而且delete都是按条件删的。如何解决由于插入删除后的查询性能问题呢?
请大师们指点。谢谢!
[解决办法]
删除少量数据应该没有什么影响,默认数据库会自动计算
如果是执行大量的删除、修改的,重新索引整理就可以了
[解决办法]
这样的东西应该不用考虑吧
[解决办法]
删除后立即COMMIT
[解决办法]
查看一下索引碎片,整理索引.
[解决办法]
关注一下!!
[解决办法]
关注~
[解决办法]
一般来说,碎片情况如果严重的话,可以整理或者重建一下聚集索引,其他索引会一起更新
[解决办法]
delete 或 update 后,会使索引的物理位置不连续,要解决这个问题
定期用dbcc 清理碎片或重新建立索引
注意,有时清理碎片的时间可能会比后面的 *** 作还要费时
[解决办法]
学习
[解决办法]
聚集索引都整理好了,还理会什么表啊?
与聚集索引的情况下,数据存储是依赖聚集索引来存储的
[解决办法]
数据库维护计划里面有重新组织索引和重新整理索引
可以定一个计划每周执行一个,将指定的数据库或某个表下面所有的索引重新整理一次
在Oracle数据的存储中,可以把存储空间想象为一个水库,数据想象为水库中的水。水库中的水的位置有一条线叫做水位线,在Oracle中,这条线被称为高水位线(High-warter mark, HWM)。在数据库表刚建立的时候,由于没有任何数据,所以这个时候水位线是空的,也就是说HWM为最低值。当插入了数据以后,高水位线就会上涨,但是这里也有一个特性,就是如果你采用delete语句删除数据的话,数据虽然被删除了,但是高水位线却没有降低,还是你刚才删除数据以前那么高的水位。也就是说,这条高水位线在日常的增删 *** 作中只会上涨,不会下跌。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)