日常索引测试过程中我们可以选择不可见索引进行测试,也可以使用虚拟索引测试,二都唯一不同的是,虚拟索引不会占用extent,便利性感觉比不可见更好些。

虚拟索引

在创建索引时显示的指定nosegment关键字,只生成索引信息不生成对应的segments

---创建表
create table userinfo
(uid number
,last_name  varchar2(30)
,first_name varchar2(30));

---插入数据
insert into userinfo
select level + 1
  ,dbms_random.string('U',dbms_random.value(3,5)) rand_last_name
  ,dbms_random.string('U',dbms_random.value(3,5)) rand_first_name
from dual
connect by level < 100000;

---测试
create index ind_userinfo_fname on cust(first_name) nosegment; 

---segments中无记录
SQL> select segment_name,bytes,segment_type from dba_segments where owner='SCOTT' and segment_name='IND_USERINFO_FNAME';
no rows selected

---需要在session级别开启
alter session set "_use_nosegment_indexes"=true; 

不可见索引
在创建索引时显示的指定invisible关键字,生成索引和对应的segments

---测试
create index ind_userinfo_lname on cust(last_name) invisible; 

---已分配extent
SQL> select segment_name,bytes,segment_type from dba_segments where owner='SCOTT' and segment_name='IND_USERINFO_LNAME';

SEGMENT_NAME                   BYTES SEGMENT_TYPE
------------------------- ---------- ------------------
IND_USERINFO_LNAME           3145728 INDEX

---需要在session级别开启
alter session set optimizer_use_invisible_indexes=true;