博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
索引虚拟oracle virtual index
阅读量:6082 次
发布时间:2019-06-20

本文共 3725 字,大约阅读时间需要 12 分钟。

这几周一直在研究索引虚拟之类的问题,现在正好有机会和大家共享一下.

    虚拟索引不耗消CPU以及IO,还有存储空间,用来判断创立的索引是不是可被用,面下举例说明:

    

SQL> create table tb1 as select owner,object_name,object_id from dba_objects;    --创立测试表

Table created.

SQL> select count(*) from tb1;

  COUNT(*)
----------
     50518

SQL> explain plan for select * from tb1 where object_id=108;           

Explained.

SQL> select * from table(dbms_xplan.display);               ---未创立虚拟索引前的执行计划

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3226679318

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     4 |   384 |    78   (2)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| TB1  |     4 |   384 |    78   (2)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------

   1 - filter("OBJECT_ID"=108)

Note
-----
   - dynamic sampling used for this statement

17 rows selected.

SQL> alter session set "_use_nosegment_indexes"=true;     --改修关相参数

Session altered.

SQL> create index tb1_object_id_idx on tb1(object_id) nosegment;    --创立虚拟索引

Index created.

SQL>  explain plan for select * from tb1 where object_id=108;      --创立虚拟索引侯的执行计划

Explained.

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 959502086

-------------------------------------------------------------------------------------------------
| Id  | Operation                   | Name              | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |                   |     4 |   384 |     5   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| TB1               |     4 |   384 |     5   (0)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN          | TB1_OBJECT_ID_IDX |   219 |       |     1   (0)| 00:00:01 |
-------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------

   2 - access("OBJECT_ID"=108)

Note
-----
   - dynamic sampling used for this statement

18 rows selected.
    每日一道理
“多难兴才”曾一度被人定为规律。请看:屈原被放逐而作《离骚》;司马迁受宫刑而作《史记》;欧阳修两岁丧父笃学而成才;曹雪芹举家食粥而写出了不朽的《红楼梦》;越王勾践卧薪尝胆而雪洗国耻;韩信遭胯下辱而统率百万雄兵……他们都是在与逆境搏斗中成为伟人的!

    


    

注意:此索引在dba_indexes中是没法查到的,要需查询dba_ind_columns

    

SQL> create index TB1_OBJECT_ID_IDX on tb1(object_id);  --虽然是虚拟索引,但是还是不能创立同名的索引,要需除删改虚拟索引                                                                                                   --创立实在索引
create index TB1_OBJECT_ID_IDX on tb1(object_id)
             *
ERROR at line 1:
ORA-00955: name is already used by an existing object

    


    

SQL>  select index_owner,index_name from dba_ind_columns where lower(index_name)='tb1_object_id_idx';

INDEX_OWNER                    INDEX_NAME
------------------------------ ------------------------------
SYS                            TB1_OBJECT_ID_IDX

    


    

SQL> drop index tb1_object_id_idx;     ---找出并除删该虚拟索引

Index dropped.

文章结束给大家分享下程序员的一些笑话语录: 不会,Intel会维持高利润,也会维持竞争局面,国外的竞争不是打死对方的那种。你看日本有尼康,佳能,索尼,都做相机,大家都过得很滋润。别看一堆厂,其实真正控制的是后面的那几个财团——有些竞争对手,后面其实是一家人。

转载地址:http://fazwa.baihongyu.com/

你可能感兴趣的文章
使用Navicat for Mysql连接服务器中的mysql服务
查看>>
flume简介架构
查看>>
FreeRADIUS 、DaloRADIUS 搭建记录
查看>>
.Net基础体系和跨框架开发普及
查看>>
精华【分布式微服务云架构dubbo+zookeeper+springmvc+mybatis+shiro+redis】分布式大型互联网企业架构!...
查看>>
SQL注入中union查询ntext数据类型
查看>>
禅道开源版10.3升级至10.6
查看>>
php中implode()和explode()的应用
查看>>
Mybatis第一天框架课程(上)
查看>>
前端: jquery绑定/动态变量/find/each/
查看>>
QuickBI助你成为分析师-数据建模(二)
查看>>
入门一班 20181031 rsync
查看>>
mybatis 中文文档
查看>>
Mysql 数据库用户密码管理
查看>>
核心交换机与普通交换机有那些优势与区别
查看>>
RAID
查看>>
论程序员成长的正确姿势
查看>>
微小V营销手机详细讲解,夏天老师书写
查看>>
手机如何扫描图片转换成word
查看>>
【Chrome】谷歌Chrome浏览器总报Shockwave Flash插件不存在
查看>>