【转】Oracle索引HINT的使用
存储在数据库中数据的分布情况开发人员或管理员比Oracle优化器更加的清楚,在优化器不能作出最有查询路径选择的情况下,使用HINT(提示)人为的固定查询路径,一定程度能生成更优的执行计划。
在SQL的查询过程中,索引是快速查询数据的方法之一,是最重要、最常见的手段,这篇文章将讨论和索引相关的HINT的使用。
1.HINT的使用方法:
select /*+ INDEX (tab pk_tab)*/ * from test.tab;
上面是一个使用HINT简单例子,其中tab是表的名称,pk_tab是索引的名称,如果表有别名,那么应该使用别名。如果表名的前面包含模式名,那么在INDEX的使用过程中不需要指定模式的名称,只需要指定表名即可。
2.HINT提示:
在Oracle数据库中索引的使用包括:索引范围扫描、索引跳跃扫描、索引快速全扫描。下面讨论Oracle数据库有关索引的提示,如下表所示,列出了不同扫描方法是用的提示:
| 索引 | 索引范围扫描 | 索引跳跃扫描 | 索引快速全扫描 |
| index | index_rs | index_ss | index_ffs |
| index_asc | no_index_rs | no_index_ss | no_index_ffs |
| index_desc | index_rs_asc | index_ss_asc | index_asc |
| index_rs_desc | index_ss_desc | index_desc |
下面举例说明不同索引HINT的使用:
1).使用索引。
select /*+ INDEX(tab pk_tab)*/ from tab;
对于这样一条SQL,查询使用索引pk_tab,至于如何扫描索引是Oracle自己决定的。如果能确定使用何种扫描方式最快,可以明确索引的扫描方式:
select /*+ INDEX_RS(tab pk_tab)*/ from tab;
select /*+ INDEX_SS(tab pk_tab)*/ from tab;
select /*+ INDEX_FFS(tab pk_tab)*/ from tab;
2).不使用索引。
select /*+ NO_INDEX_RS(tab pk_tab)*/ from tab;
对于这样一条SQL,查询不使用索引范围扫描,那么将使用表的全表扫描,根据情况还可以使用NO_INDEX_SS和NO_INDEX_FFS,不使用索引跳跃扫描和索引快速全扫描,这样将使用表的全表扫描。
3).正排序使用索引。
select * from tab order by id;
对于这样一条SQL,排序使用的正序,那么可以使用*_asc相关的HINT,例如,select /*+ INDEX_ASC(tab pk_tab)*/ * from tab order by id;INDEX_ASC表示的是按照正向顺序扫描索引。根据不同的情况还可以使用其他扫描类型的*_ASC。
4).倒排序使用索引。
select * from tab order by id desc;
对于这样一条SQL,排序使用的倒序,那么可以使用*_desc相关的HINT,例如,select /*+ INDEX_DESC(tab pk_tab)*/ from tab order by id desc;INDEX_DESC表示的是按照倒向顺序扫描索引。根据不同的情况还可以使用其他扫描类型的*_DESC。
如果索引中包含了查找的所有列,或者说索引的列就能满足查询需要,就可以使用索引快速全扫描相关的HINT。
【转】Oracle索引HINT的使用的更多相关文章
- Oracle索引HINT的使用
存储在数据库中数据的分布情况开发人员或管理员比Oracle优化器更加的清楚,在优化器不能作出最有查询路径选择的情况下,使用HINT(提示)人为的固定查询路径,一定程度能生成更优的执行计划. ...
- Oracle索引梳理系列(九)- 浅谈聚簇因子对索引使用的影响及优化方法
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
- oracle 索引失效原因及解决方法
oracle 索引失效原因及解决方法 2010年11月26日 星期五 17:10 一.以下的方法会引起索引失效 1,<>2,单独的>,<,(有时会用到,有时不会)3,like ...
- oracle索引优化
零.概述 在这之前,一直都是使用mysql来进行开发或者部署.最近及今后很长一段时间都要使用oracle,今天和同事也遇到一个oracle 慢查询问题.查了很多资料,这里记录备忘.持续更新ing... ...
- Oracle 索引扫描的五种类型
之前在讨论CBO和RBO的时候提到了索引扫描的几种类型. Oracle Optimizer CBO RBO http://blog.csdn.net/tianlesoftware/archive/20 ...
- Oracle 常见hint
Hints 应该慎用,收集相关表的统计信息,根据执行计划,来改变查询方式 只能在SELECT, UPDATE, INSERT, MERGE, or DELETE 关键字后面,只有insert可以用2个 ...
- oracle索引监控
目的:监控oracle索引的有效性,看索引有没有被使用.然后根据监控结果删除或者调整索引. 步骤: 1.监控指定索引 命令: alter index 索引名 monitoring usage; 如 ...
- Oracle索引重建
一.前言 Oracle建议对于索引深度超过4级以及已删除的索引条目至少占有现有索引条目总数的20% 这2种情形下需要重建索引.有人持不同观点,就是强烈建议不要定期重建索引.索引重建是一个争论不休被不断 ...
- 【转】Oracle索引的类型
数据库的应用类型分为 OLTP(OnLine Transaction Processing ,联机事务处理):OLTP是传统关系型数据库的主要应用,其主要面向基本的.日常的事务处理,例如银行交易. O ...
随机推荐
- jquery_DOM笔记4
jQuery遍历函数: add()添加,可以是样式,字符串,元素,文本,js对象 andself() 指向匹配元素本身 chilidren() 匹配元素的所有子元素的匹配元素 closest() 从本 ...
- python 解压 压缩包
转 http://m.blog.csdn.net/blog/wice110956/26597179# 这里讨论使用Python解压如下五种压缩文件: .gz .tar .tgz .zip .rar ...
- 泛型DAO与泛型Service
泛型Dao与Service 看了几个帖子,泛型Dao与Service的主要目的就是要减少重复代码.具体的说明如下: 1. 定义一个BaseDao接口,此接口包含了一些通用的DAO操作,例如:增加.删除 ...
- BZOJ 3527: [Zjoi2014]力
Description 求 \(E_i=\sum _{j=0}^{i-1} \frac {q_j} {(i-j)^2}-\sum _{j=i+1}^{n-1} \frac{q_j} {(i-j)^2} ...
- mapReduce的shuffle过程
http://www.jianshu.com/p/c97ff0ab5f49 总结shuffle 过程: map端的shuffle: (1)map端产生数据,放入内存buffer中: (2)buffer ...
- docker笔记
安装...不说了 docker info 查看信息 docker pull ...拉取镜像 docker run -it [镜像名] 运行 docker ps查看当前运行的容器 docker ps ...
- [转]大数据时代,python竟是最好的语言?
随着大数据疯狂的浪潮,新生代的工具Python得到了前所未有的爆发.简洁.开源是这款工具吸引了众多粉丝的原因.目前Python最热的领域,非数据分析和挖掘莫属了.从以Pandas为代表的数据分析领 ...
- Code::Blocks如何支持C++11特性
为了给同事分享C++11标准,需要一个演示C++11的编程环境.VS2013太大,安装起来不太方便.由于电脑上之前有安装codeblock,于是升级MinGW.去MinGW官网http://www.m ...
- [MySQL]索引类型总结和使用技巧以及注意事项
一.普通索引 这是最基本的索引,它没有任何限制.它有以下几种创建方式: 1.创建索引 CREATE INDEX [indexName] ON [mytable] ([column][(length)] ...
- MATLAB求解代数方程、微分方程的一些常用指令
MATLAB版本:R2015b 1.求解符号矩阵的行列式.逆.特征值.特征向量 A = sym('[a11, a12; a21, a22]');deltaA = det(A)invA = inv(A) ...