Oracle之虚拟索引
来源:互联网 发布:dnf为什么老是网络中断 编辑:程序博客网 时间:2024/05/21 22:59
DBA在日常维护管理数据库进行低性能SQL分析时,有时候需要通过创建索引对SQL进行优化,但有些时候我们创建的索引是否能用到?这个只能创建以后才能看出效果,但是在实际工作中,特别是对大表创建索引对系统性能有很大影响,因此我们不得不避开业务高峰时段,但是有没有一种办法创建索引而不影响性能呢?有,虚拟索引。
虚拟索引不是物理存在的,它并不会创建实际的索引段,只是在数据字典中加了一个索引的记录,使得优化器能够意识到一个索引的存在,从而判断是否使用该索引作为访问路径。作用仅仅是为了DBA作SQL优化时使用,DBA跟据虚拟索引的优化效果决定是否创建物理索引。
一、虚拟索引支持类型
虚拟索引支持B-TREE索引和BIT位图索引,在CBO模式下ORACLE优化器会考虑虚拟索引,但是在RBO模式下需要添加hint才行,在10g以后使用RBO模式方法
alter session set optimizer_mode=rule;
二、虚拟索引创建语法
create index idx_wxw on t(object_id) nosegment;
alter session set "_use_nosegment_indexes"=true;
注意,创建虚拟索引后需要设置隐含参数"_use_nosegment_indexes"为true ORACLE才会选择虚拟索引
三、虚拟索引特点
1.虚拟索引无法执行alter index选项
SQL> alter index idx_wxw rebuild
ERROR at line 1:
ORA-08114: can not alter a fake index
2. 使用回收站特性的时候,虚拟索引必须显式drop,才能创建同名的索引
SQL> create index idx_wxw on test(name)
ERROR at line 1:
ORA-00955: name is already used by an existing object
3. 不能创建和虚拟索引同名的实际索引
4. 可以创建和虚拟索引包含相同列但不同名的实际索引
5. 使用回收站特性的时候,虚拟索引必须显式drop,或者在drop table后purge table后,才能创建同名的索引
6. 虚拟索引分析并且有效,但是数据字典里查不到结果,估计是oracle内部临时保存了分析结果
--以下看的是真实执行计划,显然是用不到索引。
虚拟索引不是物理存在的,它并不会创建实际的索引段,只是在数据字典中加了一个索引的记录,使得优化器能够意识到一个索引的存在,从而判断是否使用该索引作为访问路径。作用仅仅是为了DBA作SQL优化时使用,DBA跟据虚拟索引的优化效果决定是否创建物理索引。
一、虚拟索引支持类型
虚拟索引支持B-TREE索引和BIT位图索引,在CBO模式下ORACLE优化器会考虑虚拟索引,但是在RBO模式下需要添加hint才行,在10g以后使用RBO模式方法
alter session set optimizer_mode=rule;
二、虚拟索引创建语法
create index idx_wxw on t(object_id) nosegment;
alter session set "_use_nosegment_indexes"=true;
注意,创建虚拟索引后需要设置隐含参数"_use_nosegment_indexes"为true ORACLE才会选择虚拟索引
三、虚拟索引特点
1.虚拟索引无法执行alter index选项
SQL> alter index idx_wxw rebuild
ERROR at line 1:
ORA-08114: can not alter a fake index
2. 使用回收站特性的时候,虚拟索引必须显式drop,才能创建同名的索引
SQL> create index idx_wxw on test(name)
ERROR at line 1:
ORA-00955: name is already used by an existing object
3. 不能创建和虚拟索引同名的实际索引
4. 可以创建和虚拟索引包含相同列但不同名的实际索引
5. 使用回收站特性的时候,虚拟索引必须显式drop,或者在drop table后purge table后,才能创建同名的索引
6. 虚拟索引分析并且有效,但是数据字典里查不到结果,估计是oracle内部临时保存了分析结果
--以下看的是真实执行计划,显然是用不到索引。
alter session set statistics_level=all;
备注:
--创建虚拟索引,首先要将_use_nosegment_indexes的隐含参数设置为true
alter session set "_use_nosegment_indexes"=true;
--虚拟索引的创建语法比较简单,实际上就是普通索引语法后面加一个nosegment关键字
--当建立虚拟索引后,可能看不到真的执行计划
--set autotrace off
--以下看的是真实执行计划,显然是用不到索引。
alter session set statistics_level=all;
阅读全文
0 0
- Oracle之虚拟索引
- oracle虚拟索引详解
- 索引类型之虚拟索引
- Oracle 虚拟索引(Virtual index)
- oracle虚拟索引的运用
- Oracle虚拟索引的运用
- oracle 虚拟索引和不可见索引
- 索引类型之虚拟列
- Oracle 11g 新特性 -- 虚拟索引!
- oracle性能调优-虚拟索引
- oracle之索引
- oracle之位图索引
- oracle之索引
- Oracle笔记之索引
- oracle学习之索引
- oracle之索引分析
- Oracle之索引、权限
- Oracle之索引特点
- 论苹果与安卓系统争霸
- 哥德尔定理的正规表述
- Python requests模块
- 微软超融合+混合云:源自Azure技术的超融合架构
- 金融二叉树模型-给期权定价
- Oracle之虚拟索引
- C++泛型编程----(二)模板类
- Hadoop概念学习系列之Hadoop、Spark学习路线(很值得推荐)
- angular中的$on、$emit、$broadcast
- Oracle之索引监控脚本大全
- Android 定制的旋转太阳的下拉刷新样式
- 【数据结构与算法】二叉树 前序 中序 后序 非递归实现 极简
- Install Pypcap packet (Win10 VS2012 Python2.7)
- deepin15.4双显卡安装cuda8.0(非optirun切换方法)