oracle 虚拟索引和不可见索引

1,虚拟索引-(Virtual index)

虚拟索引,顾名思义是不创建实际的段,目的在于,不耗时,耗CPU,耗IO,大量存储空间情况下创建索引,观察判断对SQL的优化效果

SQL> drop table t1;

Table dropped.

SQL> create table t1 as select * from dba_objects;

Table created.

SQL> explain plan for select * from t1 where object_id<=50;

Explained.

SQL> select * from table(dbms_xplan.display(null,null,'BASIC +COST'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3617692013

-----------------------------------------------
| Id  | Operation         | Name | Cost (%CPU)|
-----------------------------------------------
|   0 | SELECT STATEMENT  |      |   387   (1)|
|   1 |  TABLE ACCESS FULL| T1   |   387   (1)|
-----------------------------------------------

8 rows selected.

SQL> alter session set "_use_nosegment_indexes"=true;

Session altered.

SQL> create index index_v1 on t1(object_id) nosegment;

Index created.

SQL> explain plan for select * from t1 where object_id<=50;

Explained.

SQL> select * from table(dbms_xplan.display(null,null,'BASIC +COST'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1628153867

---------------------------------------------------------------------
| Id  | Operation                           | Name     | Cost (%CPU)|
---------------------------------------------------------------------
|   0 | SELECT STATEMENT                    |          |     3   (0)|
|   1 |  TABLE ACCESS BY INDEX ROWID BATCHED| T1       |     3   (0)|
|   2 |   INDEX RANGE SCAN                  | INDEX_V1 |     2   (0)|
---------------------------------------------------------------------

9 rows selected.
其中_use_nosegment_indexes代表指示数据库可以在执行计划中使用这些索引;create index中的nosegment代表这个索引时虚拟的


2,不可见索引(invisible)

默认情况下,当我们创建索引后,数据库就会自动的识别到该索引,并开始在成本估算中纳入创建的索引,不可见索引可是控制优化器是否对索引进行可见;很有用的一种情况是如果你想在已经创建了索引的情况下,进行一些调整,去除一些不该用的索引

alter index emp_idx1 invisible|visible; -- 使索引可见不可见,当然也可以用在创建索引的时候
默认情况下是不可见索引对优化器不可见,当然可以调整系统或者会话参数进行修改

SQL> show parameter optimizer_use_invisible;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
optimizer_use_invisible_indexes      boolean     FALSE
会话修改

SQL>  alter session set optimizer_use_invisible_indexes=true;

Session altered.

SQL> show parameter optimizer_use_invisible;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
optimizer_use_invisible_indexes      boolean     TRUE

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朝闻道-夕死可矣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值