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

http://www.itpub.net/showthread.php?s=&postid=7523115#post7523115

在数据库优化中,索引的重要性不言而喻。但是,在性能调整过程中,一个索引是否能被查询用到,在索引创建之前是无法确定的,而创建索引是一个代价比较高的操作,尤其是数据量较大的时候。

虚拟索引不是物理存在的,它并不会创建实际的索引段,只是在数据字典中加了一个索引的记录,使得优化器能够意识到一个索引的存在,从而判断是否使用该索引作为访问路径。当然,实际上最终查询的访问路径是不会使用该虚拟索引的。

所以,虚拟索引的用处就是用来判断一个索引对于sql的执行计划的影响,尤其是对整个数据库的影响,从而判断是否需要创建物理索引。

oracle文档中并没有提到虚拟索引的创建语法,实际上就是普通索引语法后面加一个nosegment关键字即可,B*Tree index和bitmap index都可以。

不同版本的虚拟索引的特性可能不一样,本文的例子执行环境为:


1.创建虚拟索引


2.使用虚拟索引


必须设置隐含参数"_use_nosegment_indexes"=true(默认为false)后,CBO才能使用虚拟索引ix_test


RBO无法使用虚拟索引


RBO使用hint可以使用虚拟索引


3.虚拟索引的特性

无法执行alter index


不能创建和虚拟索引同名的实际索引


可以创建和虚拟索引包含相同列但不同名的实际索引


在10g使用回收站特性的时候,虚拟索引必须显式drop,或者在drop table后purge table后,才能创建同名的索引


时间: 2024-09-30 21:53:59

ZT:关于虚拟索引(Virtual Index)的相关文章

ORACLE虚拟索引(Virtual Index)

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

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

[索引]Oracle之不可见索引和虚拟索引的比对    Oracle之不可见索引 :http://blog.itpub.net/26736162/viewspace-2124044/ Oracle之虚拟索引 :  http://blog.itpub.net/26736162/viewspace-2123687/   之前给大家分享过不可见索引和虚拟索引,今天给大家分享的是Oracle之不可见索引和虚拟索引的比对.   比较项目 不可见索引(Invisible Indexes) 虚拟索引(Virt

PostgreSQL 虚拟|虚假 索引(hypothetical index) - HypoPG

标签 PostgreSQL , 虚拟索引 , 虚假索引 , HypoPG , hypothetical index 背景 DBA实际上是一种比较稀缺的资源,很多企业甚至没有DBA,或者SA.开发人员兼职DBA,对于一般的使用者,对数据库了解程度有限,特别是在SQL优化方面的知识更加有限. 最常用也是奏效较快的SQL优化手段,通常是加索引,这也是我从很多开发者交流后得知的,很多人的概念是,SQL慢,加索引嘛. 但是加索引有没有效果要针对"SQL.针对数据分布.针对输入条件.针对列的唯一值比例&qu

[20120903]关于Virtual index.txt

[20120903]关于Virtual index.txt         virtual index没有segment,如何去产生该虚拟索引的统计信息,如何保证CBO的有效判断. 做一个测试与学习看看: 1.测试环境: SQL> select * from v$version ; BANNER ------------------------------------------------------------------------------ Oracle Database 11g En

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

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

关于Oracle 9i 跳跃式索引扫描(Index Skip Scan)的小测试

oracle|索引 在Oracle9i中我们知道能够使用跳跃式索引扫描(Index Skip Scan).然而,能利用跳跃式索引扫描的情况其实是有些限制的. 从Oracle的文档中我们可以找到这样的话: Index Skip ScansIndex skip scans improve index scans by nonprefix columns. Often, scanning index blocks is faster than scanning table data blocks.Sk

jquery获取元素索引值index()方法

 这篇文章主要介绍了jquery获取元素索引值index()方法,需要的朋友可以参考下 jquery获取元素索引值index()方法:   jquery的index()方法 搜索匹配的元素,并返回相应元素的索引值,从0开始计数.    如果不给 .index() 方法传递参数,那么返回值就是这个jQuery对象集合中第一个元素相对于其同辈元素的位置.  如果参数是一组DOM元素或者jQuery对象,那么返回值就是传递的元素相对于原先集合的位置.  如果参数是一个选择器,那么返回值就是原先元素相对

jQuery实现获取元素索引值index的方法_jquery

本文实例讲述了jQuery实现获取元素索引值index的方法.分享给大家供大家参考,具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">

MySQL 创建索引(Create Index)的方法和语法结构及例子_Mysql

CREATE INDEX Syntax CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [index_type] ON tbl_name (index_col_name,...) [index_type] index_col_name: col_name [(length)] [ASC | DESC] index_type: USING {BTREE | HASH | RTREE} 复制代码 代码如下: -- 创建无索引的表格 create t