从Oracle 10g开始,Oracle推出了表格在线整理碎片的功能(An ALTER TABLE ... SHRINK ),极大的提高了系统可用性。
那么表格碎片整理之后,索引是否会失效呢?实验结果来证明:
SQL> CREATE TABLE test_rowid (
2 id NUMBER,
3 pad VARCHAR2(4000),
4 CONSTRAINT test_rowid_pk PRIMARY KEY (id)
5 );
Table created.
SQL> INSERT INTO test_rowid
2 SELECT rownum AS id, dbms_random.string('p',500) AS pad
3 FROM dual
4 CONNECT BY level <= 200000;
200000 rows created.
SQL> create index idx_pad on test_rowid(pad);
Index created.
SQL> select sum(blocks) from dba_extents where owner='ZHOUL' and segment_name='TEST_ROWID';
SUM(BLOCKS)
-----------
15360
SQL> create table test_rowid_old as select rowid "row_id",id,pad from test_rowid;
Table created.
SQL> delete from test_rowid where id>=100000 and id<150000;
50000 rows deleted.
SQL> commit;
Commit complete.
SQL> select sum(blocks) from dba_extents where owner='ZHOUL' and segment_name='TEST_ROWID';
SUM(BLOCKS)
-----------
15360
SQL> alter table test_rowid enable row movement;
Table altered.
SQL> ALTER TABLE test_rowid SHRINK space cascade;
Table altered.
SQL> select sum(blocks) from dba_extents where owner='ZHOUL' and segment_name='TEST_ROWID';
SUM(BLOCKS)
-----------
10864
SQL> create table test_rowid_new as select rowid "row_id",id,pad from test_rowid;
Table created.
SQL> select t1."row_id",t2."row_id",t1.id,t2.id from test_rowid_old t1,test_rowid_new t2 where t1."row_id"!=t2."row_id" and t1.id=t2.id and rownum<10;
row_id row_id ID ID
------------------ ------------------ ---------- ----------
AAF0CfAAFAAAE53AAA AAF0CfAAFAAAE5tAAE 151929 151929
AAF0CfAAFAAAE53AAB AAF0CfAAFAAAE5tAAF 151930 151930
AAF0CfAAFAAAE53AAC AAF0CfAAFAAAE5tAAG 151931 151931
AAF0CfAAFAAAE53AAD AAF0CfAAFAAAE5tAAH 151932 151932
AAF0CfAAFAAAE53AAE AAF0CfAAFAAAE5tAAI 151933 151933
AAF0CfAAFAAAE53AAF AAF0CfAAFAAAE5tAAJ 151934 151934
AAF0CfAAFAAAE53AAG AAF0CfAAFAAAE5tAAK 151935 151935
AAF0CfAAFAAAE53AAH AAF0CfAAFAAAE5tAAL 151936 151936
AAF0CfAAFAAAE53AAI AAF0CfAAFAAAE5tAAM 151937 151937
9 rows selected.
SQL> select INDEX_NAME,STATUS from dba_indexes where owner='ZHOUL' and lower(INDEX_NAME)='test_rowid_pk';
INDEX_NAME STATUS
------------------------------ --------
TEST_ROWID_PK VALID
SQL> select INDEX_NAME,STATUS from dba_indexes where owner='ZHOUL' and lower(INDEX_NAME)='idx_pad';
INDEX_NAME STATUS
------------------------------ --------
IDX_PAD VALID
分享到:
相关推荐
### Oracle索引失效的原因及解决方法 在Oracle数据库中,索引是提高查询效率的关键工具之一。然而,在实际的应用过程中,由于多种原因可能会导致索引失效,从而影响系统的性能。本文将详细介绍Oracle索引失效的一些...
2. **索引失效情况** - `OR`条件中,只有当索引覆盖所有条件时才有效。 - 使用`NOT IN`、`NOT EXISTS`或`<>`可能导致全表扫描。 - `LIKE`操作符前缀匹配可利用索引,但模糊匹配则无法利用。 3. **索引提示(Hint...
- **索引失效**:当表结构更改或数据异常时,索引可能失效。通过重建索引或重新分析统计信息可解决。 - **索引碎片**:大量插入、删除和更新操作可能导致索引碎片,影响查询性能。定期整理索引以减少碎片。 - **...
### Oracle Database 10g 性能调整与优化知识点概览 #### 第1章 Oracle Database 10g 新功能 **1.1 安装改进** - Oracle Database 10g 引入了一系列安装改进措施,包括自动化安装过程、简化配置选项等,使得安装...
- **避免对索引字段进行计算**:在索引字段上执行任何计算都会导致索引失效,从而可能导致性能下降。例如,如果索引字段为`age`,则`WHERE age+1 = 22`将无法利用索引。 - **避免在索引字段上使用`NOT`、`<>`、`!=`...
在Oracle数据库中,索引失效可能与表的move操作有关联。 1. **表move操作**: - 表move是指将一个表从一个位置移动到另一个位置的过程,通常发生在表空间重组、表重命名等场景下。 - 在表move过程中,Oracle...
- **索引优化**:合理创建和使用B树、位图、函数索引,避免索引失效和索引选择不当。 - **分区技术**:通过分区降低数据量,提高查询效率,如范围分区、列表分区、哈希分区等。 - **表空间和数据文件管理**:合理...
- 掌握Oracle Database 10g的基础架构和核心概念。 - 学习Oracle数据库的安装、配置及基本管理技能。 - 理解Oracle实例管理和数据库存储结构的重要性。 - 掌握用户安全性管理和方案对象的管理技巧。 - **Oracle...
根据提供的文档内容,可以看出这是一份关于Oracle 10g数据库日常维护的手册。尽管文档中包含了一些非相关的网站链接,但我们可以从已有的结构和标题中提炼出一系列重要的Oracle数据库维护知识点。以下是对这份文档...
通过分析索引的碎片程度,我们可以判断是否需要重新组织或重建索引来优化存储结构。 2. **统计信息过时**:数据库系统依赖于统计信息来决定最佳的查询计划。如果这些信息过时,数据库可能选择了一个低效的查询路径...
8. 常见问题解决:涵盖安装后参数设置、杀死僵死连接、AIX内存溢出、功能执行慢、统计信息失效导致全表扫描、日志文件切换频繁、查询返回记录不正确、Linux+Oracle 10g RAC平台节点重启故障、联机日志损坏、控制文件...
这部分包括检查CRONTAB任务、Oracle JOB状态、数据增长趋势、失效的索引、不起作用的约束和无效的触发器,这些是维护数据库长期稳定运行的重要方面。 综上所述,Oracle数据库的日常维护是一项综合性的工作,涉及...
8.3 检查失效的索引:失效的索引会导致查询性能下降,需要定期检查并重建。 8.4 检查不起作用的约束:数据库约束确保数据的完整性,不起作用的约束需要检查和修复。 8.5 检查无效的trigger:无效的trigger可能...
- 失效索引:检查是否有失效的索引,及时进行重建。 - 无效约束:清理无效的约束条件,优化表结构。 - 无效trigger:删除不再使用的触发器,减少不必要的负载。 #### 四、项目实施及管理 - **项目实施方案** -...
28. **强制索引失效**:在某些特殊情况下,可能需要禁止 Oracle 使用特定索引。 29. **避免在索引列上使用计算**:计算会影响索引的使用,应尽可能避免。 30. **自动选择索引**:Oracle 自动选择最佳索引,但了解...
### Oracle数据库日常维护手册知识点概览 #### 一、检查数据库基本状况 ##### 1.1 检查Oracle实例状态 - **SQL命令**: 使用`SELECT instance_name, host_name, startup_time, status, database_status FROM v$...