热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Oracle11g新特性--InvisibleIndexes(不可见的索引)说明

Oracle从版本11g开始,可以创建不可见的索引。优化程序会忽略不可见的索引,除非在会话或系统级别上将OPTIMIZER_USE_INVISIBL

Oracle 从版本11g 开始,可以创建不可见的索引。优化程序会忽略不可见的索引,除非在会话或系统级别上将 OPTIMIZER_USE_INVISIBL

一.Invisible Indexes 说明

Oracle 从版本11g 开始,可以创建不可见的索引。优化程序会忽略不可见的索引,除非在会话或系统级别上将 OPTIMIZER_USE_INVISIBLE_INDEXES 初始化参数显式设置为TRUE。此参数的默认值是FALSE。

使索引不可见是使索引不可用或删除索引的一种替代办法。使用不可见的索引,可完成以下操作:

(1) 在删除索引之前测试对索引的删除。

(2) 对应用程序的特定操作或模块使用临时索引结构,这样就不会影响整个应用程序。

注意:

与不可用的索引不同,不可见的索引在使用DML 语句期间仍会得到维护。

当索引不可见时,优化程序生成的计划不会使用该索引。如果未发现性能下降,则可以删除该索引。还可以创建最初不可见的索引,执行测试,,然后确定是否使该索引可见。

可以查询*_INDEXES 数据字典视图的VISIBILITY 列来确定该索引是VISIBLE 还是INVISIBLE。

SQL> select visibility from dba_indexes where index_name='IDX_ID';

VISIBILIT

---------

VISIBLE

--创建不可见索引:

CREATE INDEX index_name ONtable_name(column_name) INVISIBLE;

--修改索引是否可见:

ALTER INDEX index_name INVISIBLE;

ALTER INDEX index_name VISIBLE;

二.示例

--创建表,索引,并收集统计信息:

SQL> create table dave(id number);

Table created.

SQL> begin

2 for I in 1 .. 10000 loop

3 insert into DAVE values(I);

4 end loop;

5 commit;

6 end;

7 /

PL/SQL procedure successfully completed.

SQL> create index idx_id on dave(id)invisible;

Index created.

SQL> execdbms_stats.gather_table_stats(ownname =>'&owner',tabname=>'&tablename',estimate_percent => &est_per ,method_opt =>'forall columns size 1',degree=>°ree,cascade => true);

Enter value for owner: sys

Enter value for tablename: dave

Enter value for est_per: 50

Enter value for degree: 2

PL/SQL procedure successfully completed.

SQL>

linux

推荐阅读
author-avatar
____L振豪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有