如何让ORACLE索引不起作用(不可见)
我们经常在数据库上建索引或删除索引,由于索引对SQL的执行性能影响非常大,有可能变得很好,也有可能变得很差,在线下开发环境我们可以充分测试,对于创建或删除索引没什么问题。但是在线上环境,由于高并发的访问,如果我们删除了一个重要的大索引(GB以上),删除后才发现大量SQL性能变差,很快主机就LOAD飙升,系统无法运行了,由于索引已经删除,并且很大,要当场重建基本不可能,因为这个索引巨大,创建估计要几分钟甚至几个小时,况且这时主机已经基本没有响应,IO全部用光,只能把应用停了,等索引建好后再开始打开应用,等发生这样的事才会为自己的失误而后悔。那我们有没有办法让删除索引的风险降低呢,请看下文:
我们先创建一个表t1,在t1的table_name字段上新建一个索引idx_t1_table_name。
OK,从上面我们可以看到索引很正常。那现在假设我们不再需要这个索引了,因此想删除它,但又不知道会不会有本文开头所说的风险。如果可以删除前先把索引不可见,确认没问题后再删除,这样就没问题了,为此,Oracle11g推出新的功能,设置索引是否可见,示例如下:
以上是Oracle11g的处理方法,但是在Oracle9i或Oracle10g中索引没有invisible的功能,我们如何处理呢?
现在Oracle数据库一般都采用基于成本的计算方法来生成执行计划,只要索引的成本更低,ORACLE就会选择使用索引,OK,那我们只要告诉ORACLE使用这个索引成本很高,它就不会使用这个索引,这样就达到了暂时让索引不可用的效果。相信很多人都知道ORACLE提供了dbms_stats包来管理对像的统计信息,通过dbms_stats.set_index_stats函数我们可以强制设置统计信息,现在我们只要把索引的成本设置成非常大即可,如下所示:
使用统计信息骗Oracle不使用索引的方法是偏门,如果是Oracle11g 建议还是直接使用invisible更好。
为了更好的进行索引管理,Oracle还提供了索引监视的功能,这样可以准确的确认索引还有没有使用。语法如下:
MKing
2011-05-29
我的新浪微博http://weibo.com/yzsind
分享到:
相关推荐
- **使索引可见**:使用`ALTER INDEX ... SET VISIBLE`命令将不可见索引变为可见,使其可用于查询优化。 - **使索引不可见**:使用`ALTER INDEX ... SET INVISIBLE`命令将可见索引设为不可见,以隐藏其作用。 - **...
Oracle 11g 中引入了一个新特性,称为索引不可见(Index Invisible),它允许 DBA 将索引设置为不可见状态,使得优化器在选择查询计划时忽视该索引,而不影响索引的正常更新。 索引维护是 DBA 的一项重要工作。在...
Oracle中的临时表是一种特殊的数据结构,用于存储会话或事务期间的数据,这些数据仅对当前会话可见,并在特定条件下自动清除。Oracle提供两种类型的临时表:事务型和会话型。 事务型临时表在事务开始时创建,插入的...
Oracle 12c 中引入了不可见字段的概念,允许开发人员在不影响应用程序的情况下修改数据库结构。 4. 相同字段上的多重索引 Oracle 12c 允许在相同字段上创建多个索引,以提高查询性能。 5. DDL 日志 Oracle 12c ...
Oracle数据库,作为业界领先的关系型数据库管理系统之一,自Oracle9i Release 2起便引入了强大的全文检索功能——Oracle Text。这一功能不仅提升了文本数据的检索效率,还拓展了文本管理的能力,使其成为企业级...
Oracle数据库系统是一个强大的关系型数据库管理系统,广泛应用于各种软件开发项目。在第13讲中,我们重点关注了四个核心概念:视图、索引、序列和同义词,这些都是数据库管理和优化的重要工具。 1. 视图(View) ...
**同义词**在Oracle数据库中提供了另一种数据库对象的别名,它可以是公共的,对所有用户可见,也可以是私有的,仅限于创建它的用户使用。同义词使得数据库对象的访问更加灵活,尤其是在多用户环境中,它能隐藏对象的...
3. **分段器**:分段器从过滤器的输出中提取纯文本,处理不同文本格式,如XML和HTML,去除不可见信息,重新格式化文本。 4. **词法分析器**:词法分析器将分段后的纯文本拆分成单独的标记,对于不同的语言(包括...
§12.7 变量作用范围以可见性 248 §12.8 注释 248 §12.9 简单例子 249 §12.9.1 简单数据插入例子 249 §12.9.2 简单数据删除例子 249 第十三章PL/SQL 处理流程 250 §13.1 条件语句 250 §13.2 循环 251 §13.3 ...
目 录 1 Oracle 12cR1数据库新特性 6 1.1 Oracle Pluggable Database 6 ...1.4 不可见字段 12 1.5 相同字段上的多重索引 13 1.6 DDL日志 13 1.7 临时undo 13 ···················
- 公共schema下的对象默认对其他用户不可见,需手动授权。 3. **数据类型转换**: - Oracle的VARCHAR2对应PostgreSQL的VARCHAR。 - Oracle的CLOB对应PostgreSQL的TEXT。 - Oracle的DATE对应PostgreSQL的DATE/...
在Oracle数据库管理中,系统表查询是深入了解数据库结构与状态的关键技术之一。通过查询特定的系统表,数据库管理员(DBA)或开发人员能够获取关于用户、表空间、数据库对象、表、索引、序列、视图、聚簇以及快照的...
3. 当一个会话结束(用户正常退出、用户不正常退出、Oracle 实例崩溃)或者一个事务结束的时候,Oracle 对这个会话的表执行 TRUNCATE 语句清空临时表数据。但不会清空其它会话临时表中的数据。 4. 你可以索引临时表...
临时表可以创建索引、视图和触发器,但不能建立外键。 了解并熟练掌握锁和表分区的概念及其应用,对于优化Oracle数据库的性能和确保数据一致性至关重要。在实际操作中,根据业务需求合理使用这些机制,能够显著提升...
"Oracle 的三种表连接方式详解" Oracle 的三种表连接方式是指在做表 join 的时候, Oracle 有三种方式,分别是:sort merge join(SMJ) ·nest loop(NL) ·hash join(HJ)。下面是对这三种策略的详细讲解: sort ...
Oracle数据库管理员在管理表的过程中,需要遵循一系列的准则和最佳实践,以确保数据库的高效、安全和易于维护。本文将详细介绍Oracle数据库中表的管理要点,包括表的基本概念、设计原则、创建、修改、删除以及相关的...
12.5.1 不可见索引 355 12.5.2 虚拟索引 356 12.5.3 位图联结索引 357 12.6 小结 359 第13章 SELECT以外的内容 360 13.1 INSERT 360 13.1.1 直接路径插入 360 13.1.2 多表插入 363 13.1.3 条件插入 364 ...
在安全方面,Oracle Database 12c 新增了不可见字段和多重索引的特性。不可见字段允许用户隐藏数据表中的某些字段,这增强了数据的保密性。多重索引则允许在同一个字段上创建多个索引,这样可以同时优化不同类型的...
工作原理是Oracle会提取所需要的撤销数据进行回滚,但这种回滚是临时的,仅针对当前session可见。例如,可以使用以下SQL语句来查询过去某个时间点的数据库状态: SQL> select * from dept as of timestamp to_...
- **软提交**:快速将文档加入到搜索队列,使其可被搜索,但不保证其他节点或重启后仍然可见。 - **硬提交**:确保所有已提交的更改都写入磁盘并同步到所有复制节点,保证数据持久化和一致性。 5. **增量导入过程...