在一个应用中如果数据量比较大,开始影响到页面 sql 执行效率的时候,我们通常会考虑到将历史数据搬迁到一个历史库中,以此来提高当前系统的性能,但往往有时候可以发现搬迁了以后效率并没有提升或者反而有一定的下降。
其中一个主要的原因就是我们在操作的时候通常都是用 delete 语句来删除一些历史数据,但 delete 语句是不会释放表空间占用的数据块,也就是说数据是删掉了,但位置还保留着,这块空着的表空间只能由以后再 insert 进来的时候填充。很显然这不是我们想要的效果,我们想要的就是减少表空间,提高 sql 的执行效率。
下面说下解决的办法,思路就是用 alter table XX move tablespace XX; 语句将表先移到一个空闲的表空间上再移回来,网上也有人通过查 user_tables 里面的 block 字段来观察 move 表空间前后的占用的块,那个里面只是一个统计的结果,不能作为实际考量,因为在 move tablespace 的时候所有字段的 rowid 都是重新创建的,没有数据的那些块自然也就丢掉了,再 move 回来。可以理解成类似于在其他表空间创建一个临时表,把当前的表删掉重新建回来。
还有一点要注意的就是,move 的同时既然 rowid 是重新创建的,那么该表上的索引自然也就失效了,再 move 回来以后别忘了把索引重新再建一下,要不然 sql 会报错无法执行。
最后别忘了分析下表。analyze table XX compute statistics;
分享到:
相关推荐
在解决问题之前,首先需要使用 delete 语句删除大量数据,然后使用 truncate table 语句清空表空间。接着,使用 analyze table 语句重新分析表的统计信息,以便提高查询效率。 analyze 语句的作用是收集表的统计...
例如,Oracle中的“表空间”对应于SQL Server中的“文件组”。理解这些术语的差异有助于更准确地迁移数据库。 ##### 登录帐户 - **登录帐户**:登录是访问数据库的第一步。在Oracle中,通常使用操作系统身份验证或...
在管理Oracle数据库时,有时需要删除不再使用的表空间,以释放磁盘空间或优化数据库结构。本篇文章将详细介绍如何在Oracle数据库中快速删除表空间,以及相关的重要知识点。 首先,理解表空间在Oracle中的角色至关...
在IT行业中,C#是一种广泛使用的面向对象的编程语言,尤其在Windows应用程序和.NET框架的开发中占据主导地位。Oracle数据库则是全球领先的大型关系型...这在数据迁移、数据备份或数据交换等场景中具有实际应用价值。
而 DELETE 和某些 UPDATE 操作可以释放空间。Oracle 提供两种自由空间管理方式:自动管理和手动管理。自动管理允许数据库根据需要自动调整空间分配,而手动管理则需要 DBA 更直接地干预。 行链接(Row Chaining)和...
DELETE和UPDATE操作可能会释放空间,但Oracle通常不会立即合并不连续的自由空间,除非在插入新行或更新行时找不到足够的连续空间。Oracle提供了自动和手动两种自由空间管理方式。 6. **行链接和行迁移**:当行数据...
DELETE和UPDATE释放的自由空间可能不连续,Oracle通常不会主动合并这些空间,除非在插入或更新时找不到连续的自由空间。 行链接(Row Chaining)和行迁移(Row Migrating)是处理数据行过大时的策略。行链接发生在...
这样可以避免高水位标记(HWM)问题,释放出大量空间。 2. **表空间回收** - 使用`ALTER TABLE ... SHRINK SPACE`命令可以回收表空间,但这个特性仅在Oracle 10g及以上版本支持。 - `ALTER TABLESPACE ... COALESCE...
这种方法不仅简化了数据迁移过程,还便于创建专门用于数据分析或报告的临时表。 #### 9. 查找与删除重复记录的高效方法 对于查找和删除重复记录,`GROUP BY`配合`HAVING count(column) > 1`可以迅速定位重复项。...
要删除学生表中的所有行,可以使用`TRUNCATE TABLE`语句,这比`DELETE`语句更高效,因为它不记录每一行的删除操作,而是直接清空表内容。然而,`TRUNCATE`无法回滚,且会释放表所占用的段空间。 7. 修改表定义: ...
即使删除了部分数据,HWM也不会自动收缩,导致扫描过程中读取了大量的空闲空间,影响性能。 针对HWM过高的问题,有几种解决方案: 1. **移动表所在的表空间**:通过将表暂时移到另一个表空间再移回原来的位置来...
Load/Dump是数据迁移和恢复的过程,用于在不同系统间传输数据或者在出现问题时恢复到特定状态。 行政工具(Utility Tools)部分,可能包含了一系列用于监控、诊断和优化数据库性能的实用程序,比如查询分析器、日志...
在范围分区中,面临挑战包括分区清理逻辑复杂、DELETE效率低下、DELETE无法释放空间、数据量迅速膨胀、分区数量不断增长等问题。解决方案包括INSERT + EXCHANGE方式、MERGE分区减少分区数量、避免DELETE效率低下、...
- **表的删除**:使用`DROP TABLE`语句删除表,可附加`PURGE`选项立即释放存储空间。 - **表的复制与截取**:通过`CREATE TABLE ... AS SELECT ... WHERE 1=2`语句创建一个空表,再用`INSERT INTO ... SELECT ...`...
可以考虑增加列的宽度或将数据迁移到新的表中。 **14. 怎样才能找出最后一次插入时分配了哪个自动增量?** 使用`LAST_INSERT_ID()`函数可以获取最近一次插入操作产生的自动增量值。 **15. 自增ID作为主键的优势是...
1. **触发器(Triggers)**:触发器是一种特殊的存储过程,当特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行。创建触发器可以用于实现复杂的业务规则,例如数据验证、日志记录或数据同步。在MSSQL ...
压缩Access数据库的主要目的是优化存储结构,释放碎片空间,提高数据读取速度。Access数据库的压缩过程包括两部分:紧凑和修复。紧凑是将数据库中的所有对象(如表、查询、窗体等)重新组织,删除空闲的空间,使得...
当需要调整环结构时(如添加新的设备或删除旧设备),环会确保每次调整只移动最少数量的虚节点,以减少数据迁移的工作量。 #### 1.3 对象服务器 (Object Server) 对象服务器是实际存储数据的物理节点,每个对象...
- **Sp_detach_db/Sp_attach_db**:分离和附加数据库,便于数据迁移。 - **BACKUP DATABASE/RESTORE DATABASE**:数据库备份与恢复操作,确保数据安全。 - **CREATE TABLE**:定义表结构,初始化数据库表。 以上...