【索引】Oracle之不可见索引和虚拟索引的比对

【索引】Oracle之不可见索引和虚拟索引的比对

  

Oracle之不可见索引 :http://blog.itpub.net/26736162/viewspace-2124044/

Oracle之虚拟索引 :  http://blog.itpub.net/26736162/viewspace-2123687/

 

之前给大家分享过不可见索引和虚拟索引,今天给大家分享的是Oracle之不可见索引和虚拟索引的比对。

 


比较项目


不可见索引(Invisible Indexes)


虚拟索引(Virtual Index)、无段索引


出现版本


11g


9i


有无索引段


有索引段,占用一定的存储空间


无索引段,不占用存储空间


是否可以通过ALTER直接切换其属性


可以通过ALTER直接修改索引是否可见: 
ALTER INDEX INDEX_NAME INVISIBLE; 
ALTER INDEX INDEX_NAME VISIBLE;


不能通过ALTER修改属性,也不能通过ALTER重建虚拟索引


视图DBA_INDEXES是否可以查询到




视图DBA_OBJECTS是否可以查询到




启用参数


OPTIMIZER_USE_INVISIBLE_INDEXES (默认为false)


_USE_NOSEGMENT_INDEXES(默认为false)


创建语法


CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN_NAME) INVISIBLE;


CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN_NAME) NOSEGMENT;


查询系统中存在的所有不可见或虚拟索引的SQL


SELECT OWNER, INDEX_NAME FROM DBA_INDEXES WHERE VISIBILITY='INVISIBLE';


SELECT INDEX_OWNER, INDEX_NAME 
  FROM DBA_IND_COLUMNS 
WHERE INDEX_NAME NOT LIKE 'BIN$%' 
MINUS 
SELECT OWNER, INDEX_NAME 
  FROM DBA_INDEXES;


作用


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


模拟索引的存在而不用真实的创建一个完整索引。这允许开发者创建虚拟索引来查看相关执行计划而不用等到真实创建完索引才能查看索引对执行计划的影响,并且不会增加存储空间的使用。


共同点


都可以通过参数在SESSION和SYSTEM级别进行设置

 

      about me

..........................................................................................................................................................................................................                        

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 本文在ITpub(http://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和个人微信公众号(xiaomaimiaolhr)上有同步更新

● QQ群:230161599 微信群:私聊

● 本文itpub地址:http://blog.itpub.net/26736162/viewspace-2124164/ 本文博客园地址:http://www.cnblogs.com/lhrbest/p/5819173.html

● 本文pdf版:http://yunpan.cn/cdEQedhCs2kFz (提取码:ed9b)

● 小麦苗分享的其它资料:http://blog.itpub.net/26736162/viewspace-1624453/

● 联系我请加QQ好友(642808185),注明添加缘由

● 于 2016-08-27 15:00~ 2016-08-27 19:00 在中行完成

● 【版权所有,文章允许转载,但须以链接方式注明源地址,否则追究法律责任】

..........................................................................................................................................................................................................

长按下图识别二维码或微信客户端扫描下边的二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。

时间: 2024-10-23 20:07:50

【索引】Oracle之不可见索引和虚拟索引的比对的相关文章

ORACLE虚拟索引(Virtual Index)

ORACLE虚拟索引(Virtual Index)   虚拟索引概念   虚拟索引(Virtual Indexes)是一个定义在数据字典中的假索引(fake index),它没有相关的索引段.虚拟索引的目的是模拟索引的存在而不用真实的创建一个完整索引.这允许开发者创建虚拟索引来查看相关执行计划而不用等到真实创建完索引才能查看索引对执行计划的影响,并且不会增加存储空间的使用.如果我们观察到优化器生成了一个昂贵的执行计划并且SQL调整指导建议我们对某些的某列创建索引,但在生产数据库环境中创建索引与测

[20130815]关于虚拟索引的问题.txt

[20130815]关于虚拟索引的问题.txt 虚拟索引建立并没有占用磁盘空间,主要用来评估建立的索引是否可用.但是存在一个问题,如果建立了这样的索引,dba如何知道目前数据库存在那些虚拟索引,做一个例子来说明: 1.建立测试环境: SQL> @ver BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edit

ZT:关于虚拟索引(Virtual Index)

http://www.itpub.net/showthread.php?s=&postid=7523115#post7523115 在数据库优化中,索引的重要性不言而喻.但是,在性能调整过程中,一个索引是否能被查询用到,在索引创建之前是无法确定的,而创建索引是一个代价比较高的操作,尤其是数据量较大的时候. 虚拟索引不是物理存在的,它并不会创建实际的索引段,只是在数据字典中加了一个索引的记录,使得优化器能够意识到一个索引的存在,从而判断是否使用该索引作为访问路径.当然,实际上最终查询的访问路径是不

oracle数据库性能调优技术:索引调优

一.概述 随着数据库在各个领域的使用不断增长,越来越多的应用提出了高性能的要求.数据库性能调优是知识密集型的学科,需要综合考虑各种复杂的因素:数据库缓冲区的大小.索引的创建.语句改写等等.总之,数据库性能调优的目的在于使系统运行得更快. 调优需要有广泛的知识,这使得它既简单又复杂. 说调优简单,是因为调优者不必纠缠于复杂的公式和规则.许多学术界和业界的研究者都在尝试将调优和查询处理建立在数学基础之上. 称调优复杂,是因为如果要完全理解常识所依赖的原理,还需要对应用.数据库管理系统.操作系统以及硬

***oracle点知识3——数据段和索引段管理

在Oracle数据库中,段往往被用来存储特定逻辑对象的所有数据.如当建立数据库表或者索引时,Oracle就会为这些对象分配存储空间,以存放他们所需要的信息.段是由一个或者多个区组成的.不要看段是Oracle数据库中一个不起眼的角色,其实,在其中,仍然隐藏着许多不为人知的管理技巧.若数据库管理员能够掌握这些内容,或许,其工作会变得轻松许多. 技巧一:对大表执行分区段. 表分区段用于存储分区表中某个分区的数据.如把某一个表分为几个区,每个区就对应一个表分区段.这么设置是可行的.因为根据段管理规则,在

Oracle 9i轻松取得建表和索引的DDL语句_oracle

正在看的ORACLE教程是:Oracle 9i轻松取得建表和索引的DDL语句.我们都知道在9i之前,要想获得建表和索引的语句是一件很麻烦的事.我们通常的做法都是通过export with rows=no来得到,但它的输出因为格式的问题并不能直接拿来用.而另一种方法就是写复杂的脚本来查询数据字典,但这对于一稍微复杂的对象,如IOT和嵌套表等,还是无法查到. 从数据字典中获得DDL语句是经常要用的,特别是在系统升级/重建的时候.在Oracle 9i中,我们可以直接通过执行dbms_metadata从

Oracle 数据库中创建合理的数据库索引_oracle

笔者认为,在创建索引时要做到三个适当,即在适当的表上.适当的列上创建适当数量的索引.虽然这可以通过一句话来概括优化的索引的基本准则,但是要做到这一点的话,需要数据库管理员做出很大的努力.具体的来说,要做到这个三个适当有如下几个要求. 一. 根据表的大小来创建索引. 虽然给表创建索引,可以提高查询的效率.但是数据库管理员需要注意的是,索引也需要一定的开销的.为此并不是说给所有的表都创建索引,那么就可以提高数据库的性能.这个认识是错误的.恰恰相反,如果不管三七二十一,给所有的表都创建了索引,那么其反

使用索引的误区之一:没有使用复合索引的前导列导致查询不使用索引

索引 使用索引的误区之一:没有使用复合索引的前导列导致查询不使用索引在oracle中,我们经常以为建立了索引,sql查询的时候就会如我们所希望的那样使用索引,事实上,oracle只会在一定条件下使用索引,这里我们总结数第一点:oracle会在条件中包含了前导列时使用索引,即查询条件中必须使用索引中的第一个列,请看下面的例子 SQL> select * from tab;   TNAME                          TABTYPE  CLUSTERID -----------

使用索引的误区之三:基于函数的索引

函数|索引 使用索引的误区之三:基于函数的索引使用基于函数的索引(BFI, Based Function Index): 从Oracle 8i开始,可以使用基于函数的索引来提高查询性能,   使用基于函数的索引,需要几个条件: 1,  用户需要有create index或者create any index权限 2,  用户需要有query rewrite或者global query rewirte权限 3,  设置系统参数 query_rewrite_enabled=TRUE 和 query_r