Oracle里大量删除记录后,表和索引里占用的数据块空间并没有释放。
table move可以释放已删除记录表占用的数据块空间,整理碎片。如果将表格用move方式整理碎片后,索引将失效,这时需要将索引重建。
重建索引可以释放已删除记录索引占用的数据块空间。重建索引不仅能增加索引表空间空闲空间大小,还能够提高查询性能。
--table move
alter table tbl move;
--rebuild索引
alter index idx_tbl_col rebuild;
alter index idx_tbl_col rebuild online;
--rename
ALTER INDEX employee_idx RENAME TO employee_index_Newname;
普通情况下建立索引或者rebuild索引时,oracle会对基表加share锁,由于share锁和 row-X是不兼容的,也就是说,在建立索引期间,无法对基表进行DML操作。
是否加online,要看你的系统需求。因为不加online时rebuild会阻塞一切DML操作。
当我们对索引进行rebuild时,如果不加online选项,oracle则直接读取原索引的数据;当我们添加online选项时,oracle是直接扫描表中的数据
索引在重建时,查询仍然可以使用旧索引。实际上,oracle在rebuild时,在创建新索引过程中,并不会删除旧索引,直到新索引rebuild成功。
从这点可以知道rebuild比删除索引然后重建索引的一个好处是不会影响原有的SQL查询,但也正由于此,用rebuild方式建立索引需要相应表空间的空闲空间是删除重建方式的2倍。
可以通过如下的sql看到rebuild前后的索引空间大小
Select Segment_Name, Sum(bytes) / 1024 / 1024/1024 as Gsize
From User_Extents
Group By Segment_Name
order by Gsize desc
不能直接rebuild整个分区索引
对于非组合索引,需要rebuild每个分区(partition),不能直接rebuild整个索引
对于组合索引,需要rebuild每个子分区(subpartition),不能直接rebuild整个索引,也不能直接rebuild分区
使用下面的sql可以生成相应的rebuild语句,注意是否加上online
非组合索引:
select 'alter index ' || index_owner || '.' ||index_name ||' rebuild partition ' || PARTITION_NAME || ' nologging parallel ;'
from dba_ind_partitions
where index_owner = 'USER_NAME'
AND INDEX_NAME = 'idx_tbl_col'
组合索引:
select 'alter index ' || index_owner || '.' ||index_name ||' rebuild subpartition ' || subpartition_name || ' parallel ;'
from dba_ind_subpartitions where index_owner='&index_owner' and index_name='&index_name';
参考
rebuild 分区索引
分享到:
相关推荐
本压缩包“SAP_very_useful_Oracle_SQL_cmd.zip_SAP_SAP rebuild index_Table”提供了与SAP系统相关的一系列Oracle数据库操作的实用工具,主要涉及表的管理和索引重建。 首先,解锁阴影实例(unlock shadow ...
### Oracle更改表空间(table、index、lob) 在Oracle数据库管理中,更改表空间是一项重要的维护任务,尤其是在需要重新组织数据或优化存储时。本文将详细介绍如何通过SQL命令来更改表空间中的表(table)、索引...
SELECT TABLE_NAME, INDEX_NAME FROM INFORMATION_SCHEMA.INDEXES WHERE TABLE_SCHEMA = 'your_schema' AND TABLE_NAME NOT IN ('sysdiagrams') OPEN indexCursor FETCH NEXT FROM indexCursor INTO @tableName, @...
1. 扫描方式差异:`REBUILD`通常使用`INDEX FAST FULL SCAN`或`TABLE FULL SCAN`,取决于统计信息的成本。`REBUILD ONLINE`则执行表扫描,两者均涉及排序操作。 2. `REBUILD`会阻塞DML操作,而`REBUILD ONLINE`不会...
3. **移动表和索引到新表空间**:使用`ALTER TABLE MOVE`和`ALTER INDEX REBUILD`命令。 ### 三、表空间变动后可能出现的问题及解决方案 #### 问题1:索引失效 在移动表时,如果表上存在索引,可能会导致索引失效...
根据提供的信息,我们可以总结出以下关于“索引重建(Index Rebuild)”的相关知识点: ### 索引重建概述 **索引重建**是数据库管理中的一个重要操作,它涉及删除现有的索引并重新创建它。这个过程可以帮助优化...
ALTER TABLE <table_name> MOVE ... COMPRESS; ``` 例如,压缩名为 `T1` 的表: ```sql SQL> alter table T1 move compress; Table altered. ``` 对于分区表,由于其特殊的结构,不能直接对整个表执行 `MOVE ...
SELECT * FROM ALL_IND_PARTITIONS WHERE INDEX_OWNER='MMS' AND INDEX_NAME='I_MMDATA_PRODUCT_ID' AND (PARTITION_NAME LIKE 'P2018%' OR PARTITION_NAME LIKE 'P2019%'); ``` Oracle 分区表分区索引是提高数据...
- 重命名列:`ALTER TABLE table_name RENAME COLUMN old_name TO new_name;` - 添加约束:`ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY (column_name);` - 删除约束:`ALTER TABLE ...
解决方法是重建索引,使用 alter index XXX rebuild 语句可以快速重建索引。 在解决问题之前,首先需要使用 delete 语句删除大量数据,然后使用 truncate table 语句清空表空间。接着,使用 analyze table 语句重新...
- `REBUILD`命令使用`INDEX FAST FULL SCAN`(或`TABLE FULL SCAN`,具体取决于统计信息的成本)来读取原索引中的数据。 - `REBUILD ONLINE`则执行表扫描获取数据。 2. **性能考量:** - `REBUILD`方式耗时较长...
SELECT 'ALTER INDEX ' || A.OWNER || '.' || A.INDEX_NAME || ' REBUILD NOLOGGING ONLINE;' FROM DBA_INDEXES A WHERE A.TABLE_NAME = 'WWFF' AND A.STATUS <> 'VALID' AND A.PARTITIONED <> 'YES'; ``` 2....
ALTER INDEX IDX_ID REBUILD ONLINE; ``` 在移动表之后,可能还需要对表上的索引进行相应的调整。这里使用的是`REBUILD ONLINE`方式,这种方式可以在不锁定表的情况下完成索引的重建工作,对于大型数据库来说是...
通过使用DBMS_REDEFINITION、ALTER TABLE MOVE或ALTER INDEX REBUILD等方式,可以有效地整理和合并碎片,提高数据库的存储效率和查询速度。 再者,回滚段(ROLLBACK SEGMENTS)管理是Oracle事务处理的关键部分。...
Oracle提供了多种方法来帮助我们重构索引,包括`DROP AND RECREATE`、`REBUILD`以及`REBUILD ONLINE`等方式。本文将详细介绍这些不同的索引重构方法,并通过实例展示它们的特点和适用场景。 #### 二、索引重构的...
@FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE', @FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE', @FragmentationLevel1 = 5, @...
alter table TABLE_NAME add constraint KEY_NAME primary key (TABLE_COLUMN) using index tablespace TABLE_SPACE_NAME; 2.增加外键 alter table TABLE_NAME add constraint FK_NAME foreign key (TABLE_COLUMN)...
SELECT 'ALTER INDEX ' || index_name || ' REBUILD TABLESPACE HGZDZX_GZNZJY;' FROM user_indexes WHERE index_name NOT LIKE '%$$'; ``` ##### 第七步:确认合并结果 最后,执行以下 SQL 语句来确认所有表空间...
在SQL Server中,索引重建(Rebuild)是一项重要的维护任务,它有助于优化查询性能,通过重新组织数据页和消除碎片。然而,系统并不直接记录每个索引的最后一次重建时间。当你需要确认某个索引何时进行了重建时,...
where c.owner = upper('&table_owner') and c.table_name = upper('&table_name') and c.owner = cc.owner and c.constraint_name = cc.constraint_name order by cc.position; 8、存储函数和过程 查看函数...