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

简介: http://www.itpub.net/showthread.php?s=&postid=7523115#post7523115在数据库优化中,索引的重要性不言而喻。

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后,才能创建同名的索引


目录
相关文章
|
7月前
Elasticsearch【问题记录 02】【不能以root运行es + max virtual memory areas vm.max_map_count [65530] is too low处理】
【4月更文挑战第12天】Elasticsearch【问题记录 02】【不能以root运行es + max virtual memory areas vm.max_map_count [65530] is too low处理】
60 3
|
3月前
|
数据库 Python
现在有个外键值是area_id_id,我就想他叫area_id该怎么做
现在有个外键值是area_id_id,我就想他叫area_id该怎么做
SAP WM LT42创建TO,报错-No entry in Table 329S (NM1 B)-
SAP WM LT42创建TO,报错-No entry in Table 329S (NM1 B)-
SAP WM LT42创建TO,报错-No entry in Table 329S (NM1 B)-
|
SQL Oracle 关系型数据库
ORACLE虚拟索引(Virtual Index)
ORACLE虚拟索引(Virtual Index)   虚拟索引概念   虚拟索引(Virtual Indexes)是一个定义在数据字典中的假索引(fake index),它没有相关的索引段。虚拟索引的目的是模拟索引的存在而不用真实的创建一个完整索引。
1016 0
|
关系型数据库 Perl
20171228db_link的full_hash_value值的计算
[20171228]db_link的full_hash_value值的计算.txt SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER -----------...
1247 0