【索引】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-17 10:11:07

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

ORACLE虚拟索引(Virtual Index)

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

利用虚拟索引(Virtual Index)优化数据库的案例分析

当我们在对生产库做优化的时候,主要就是对SQL语句的优化,包括语句的等价改写等,但其中很大一部分情况,又与索引有关.如果能合理利用合适的索引,可以使原本走全表扫描产生的逻辑读大大降低,提高数据库的性能.由于Oracle数据库中的索引本身就要占用磁盘空间,维护索引需要一定的开销,如何才能知道创建某个索引,会给数据带来性能的提升,而又不至于判断失误,创建了一个不恰当的索引,最后又不得不删除呢?这种情况下,我们可以利用Oralce提供的虚拟索引,即nosegment索引,它并不占用磁盘资源,只是在数据

Oracle虚拟索引

从9.2版本开始Oracle引入了虚拟索引的概念,虚拟索引是一个"伪造"的索引,它的定义只存在数据字典中并有存在相关的索引段.虚拟索引是为了在不真正创建索引的情况下,验证如果使用索引sql执行计划是否改变,执行效率是否能得到提高. 本文在11.2.0.4版本中测试使用虚拟索引 1.创建测试表 [email protected]> create table test_t as select * from dba_objects; Table created. [email prot

Oracle虚拟索引的运用

在做SQL调优的时候,有的时候需要加一个索引,测试下对性能提升有没有帮组,如果此时这张表非常大,建索引将会非常之麻烦,这种场景虚拟索引就该登场了.下面来做个试验: SQL> select * from v$version; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi P

Oracle:其他数据对象(序列,索引,同义词)

1.序列(sequence) 序列:可供多个用户来产生唯一数值的数据库对象集合 自动提供唯一数值 共享对象 主要用于主键自增 将序列值装入内存可以提高访问效率 创建: CREATE SEQUENCE sequence increment by n start with n maxvalue n | nomaxvalue minvalue n | no maxvalue cycle | nocycle cache | nocache 查询序列: 查询数据字典视图 USER_SEQUENCES 获取

pgspider 集成hypopg 虚拟索引扩展

虚拟索引是不占用空间的,可以用来方便的进行sql 查询的性能评估,帮助我们了解查询优化的效果 hypopg 是一个pg 扩展,提供了比较方便的函数,我们可以用来评估查询,以下是pgspider 集成hypopg 的一个学习 环境准备 dockerfile 使用docker 运行,参考我的相关连接 FROM dalongrong/pgspider:base as build WORKDIR /app RUN apt-get update && apt-get install -y autom

6.1、索引--Oracle模式对象

1.创建索引: (1).单列索引 Create index name_index on 门诊费用记录(id) (2).复合索引 同一张表可以有多个索引,但是要求列的组合必须不同, --例如: Create index emp_id on emp(ename,job); Create index emp_id on emp(job,ename); 搜索是按照从后往前的顺序查找到,所以建立索引时,应按照列的区分度 2.创建原则: (1).在大表上创建索引才有意义: (2).在where子句或是连接条

6.3、分区表、分区表索引--Oracle模式对象

分区: (1).一种分区技术,可以在创建表时应用分区技术,将数据以分区形式保存. (2).可以将巨型表或索引分割成相对较小的.可独立管理的部分. (3).表分区时必须为表中的每一条记录指定所属分区. 对表进行分区优点: 增强可用性: 维护方便: 均衡I/O: 改善查询性能. 创建分区表 分区方法:范围分区.散列分区.列表分区.组合范围散列分区和组合范围列表分区: 1.范围分区:是对数据表中某个值的范围,使用partition by range子句进行分区. 1 create table test

oracle CBO下使用更具选择性的索引

基于成本的优化器(CBO, Cost-Based Optimizer)对索引的选择性进行判断来决定索引的使用是否能提高效率. 如果索引有很高的选择性, 那就是说对于每个不重复的索引键值,只对应数量很少的记录. 比如, 表中共有100条记录而其中有80个不重复的索引键值. 这个索引的选择性就是80/100 = 0.8 . 选择性越高, 通过索引键值检索出的记录就越少. 如果索引的选择性很低, 检索数据就需要大量的索引范围查询操作和ROWID 访问表的 操作. 也许会比全表扫描的效率更低.   下列