通常我们使用hint来固定查询计划选择走表的索引 固定表的连接等等,但是如果第一层查询的是视图呢?

yang@rac1>CREATE TABLE TA (ID NUMBER, NAME VARCHAR2(30), TYPE VARCHAR2(30));

Table created.

yang@rac1>CREATE TABLE TB (ID NUMBER, NAME VARCHAR2(30), TYPE VARCHAR2(30));

Table created.

yang@rac1>create index idx_id_ta on ta(id);

Index created.

yang@rac1>create index idx_id_tb on tb(id);

Index created.

yang@rac1>CREATE VIEW V_Tab AS

  2   SELECT * FROM TA

  3  UNION ALL

  4    SELECT * FROM TB;

View created.

普通的查询视图,并没有走索引。

yang@rac1> SELECT  * 

  2     FROM V_TAB

  3     WHERE ID<2500;

9996 rows selected.

Execution Plan

----------------------------------------------------------

Plan hash value: 4036260501

-----------------------------------------------------------------------------

| Id  | Operation           | Name  | Rows  | Bytes | Cost (%CPU)| Time     |

-----------------------------------------------------------------------------

|   0 | SELECT STATEMENT    |       |     1 |    47 |     2   (0)| 00:00:01 |

|   1 |  VIEW               | V_TAB |     1 |    47 |     2   (0)| 00:00:01 |

|   2 |   UNION-ALL         |       |       |       |            |          |

|*  3 |    TABLE ACCESS FULL| TA    |  4998 |   229K|     9   (0)| 00:00:01 |

|*  4 |    TABLE ACCESS FULL| TB    |  4998 |   229K|     9   (0)| 00:00:01 |

-----------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   3 - filter("ID"<2500)

   4 - filter("ID"<2500)

Note

-----

   - dynamic sampling used for this statement (level=2)

====使用常规使用hint的方式(表名 索引名称)

yang@rac1> SELECT /*+ index(tb  idx_id_tb) index(ta idx_id_ta) */* 

  2     FROM V_TAB

  3     WHERE ID<2500;

9996 rows selected.

Execution Plan

----------------------------------------------------------

Plan hash value: 4036260501

-----------------------------------------------------------------------------

| Id  | Operation           | Name  | Rows  | Bytes | Cost (%CPU)| Time     |

-----------------------------------------------------------------------------

|   0 | SELECT STATEMENT    |       |     1 |    47 |     2   (0)| 00:00:01 |

|   1 |  VIEW               | V_TAB |     1 |    47 |     2   (0)| 00:00:01 |

|   2 |   UNION-ALL         |       |       |       |            |          |

|*  3 |    TABLE ACCESS FULL| TA    |  4998 |   229K|     9   (0)| 00:00:01 |

|*  4 |    TABLE ACCESS FULL| TB    |  4998 |   229K|     9   (0)| 00:00:01 |

-----------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   3 - filter("ID"<2500)

   4 - filter("ID"<2500)

并不凑效!依然走全表扫描!

Note

-----

- dynamic sampling used for this statement (level=2)

==使用 视图前缀修饰表名的方式(VIVE.TABNAME  INDEX_NAME)

yang@rac1> SELECT /*+ index(v_tab.tb  idx_id_tb) index(v_tab.ta idx_id_ta) */* 

  2     FROM V_TAB

  3     WHERE ID<2500;

9996 rows selected.

Execution Plan

----------------------------------------------------------

Plan hash value: 531820221

-------------------------------------------------------------------------------------------

| Id  | Operation                     | Name      | Rows  | Bytes | Cost (%CPU)| Time     |

-------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT              |           |     1 |    47 |     2   (0)| 00:00:01 |

|   1 |  VIEW                         | V_TAB     |     1 |    47 |     2   (0)| 00:00:01 |

|   2 |   UNION-ALL                   |           |       |       |            |          |

|   3 |    TABLE ACCESS BY INDEX ROWID| TA        |  4998 |   229K|    18   (0)| 00:00:01 |

|*  4 |     INDEX RANGE SCAN          | IDX_ID_TA |  4998 |       |    18   (0)| 00:00:01 |

|   5 |    TABLE ACCESS BY INDEX ROWID| TB        |  4998 |   229K|  5016   (1)| 00:01:01 |

|*  6 |     INDEX RANGE SCAN          | IDX_ID_TB |  4998 |       |    17   (0)| 00:00:01 |

-------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   4 - access("ID"<2500)

   6 - access("ID"<2500)

yang@rac1>

对于创建视图的时候包含表的别名的情况:

yang@rac1>CREATE VIEW V_Tab02 AS

  2   SELECT * FROM TA t1

  3  UNION ALL

  4    SELECT * FROM TB t2 ;

View created.

yang@rac1> SELECT /*+ index(tb  idx_id_tb) index(ta idx_id) */* 

  2     FROM V_TAB02

  3     WHERE ID<2500;

9996 rows selected.

Execution Plan

----------------------------------------------------------

Plan hash value: 3023640653

-------------------------------------------------------------------------------

| Id  | Operation           | Name    | Rows  | Bytes | Cost (%CPU)| Time     |

-------------------------------------------------------------------------------

|   0 | SELECT STATEMENT    |         |     1 |    47 |     2   (0)| 00:00:01 |

|   1 |  VIEW               | V_TAB02 |     1 |    47 |     2   (0)| 00:00:01 |

|   2 |   UNION-ALL         |         |       |       |            |          |

|*  3 |    TABLE ACCESS FULL| TA      |  4998 |   229K|     9   (0)| 00:00:01 |

|*  4 |    TABLE ACCESS FULL| TB      |  4998 |   229K|     9   (0)| 00:00:01 |

-------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   3 - filter("ID"<2500)

   4 - filter("ID"<2500)
yang@rac1> SELECT /*+ index(v_tab02.tb  idx_id_tb) index(v_tab02.ta idx_id) */* 

  2     FROM V_TAB02

  3     WHERE ID<2500;

9996 rows selected.

Execution Plan

----------------------------------------------------------

Plan hash value: 3023640653

-------------------------------------------------------------------------------

| Id  | Operation           | Name    | Rows  | Bytes | Cost (%CPU)| Time     |

-------------------------------------------------------------------------------

|   0 | SELECT STATEMENT    |         |     1 |    47 |     2   (0)| 00:00:01 |

|   1 |  VIEW               | V_TAB02 |     1 |    47 |     2   (0)| 00:00:01 |

|   2 |   UNION-ALL         |         |       |       |            |          |

|*  3 |    TABLE ACCESS FULL| TA      |  4998 |   229K|     9   (0)| 00:00:01 |

|*  4 |    TABLE ACCESS FULL| TB      |  4998 |   229K|     9   (0)| 00:00:01 |

-------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   3 - filter("ID"<2500)

   4 - filter("ID"<2500)

==此时必须使用创建视图的表的相对应的别名(VIVE.TAB_ALIAS_NAME  INDEX_NAME)

yang@rac1> SELECT /*+ index(v_tab02.t2  idx_id_tb) index(v_tab02.t1 idx_id) */* 

  2     FROM V_TAB02

  3     WHERE ID<2500;

9996 rows selected.

Execution Plan

----------------------------------------------------------

Plan hash value: 3173198873

-------------------------------------------------------------------------------------------

| Id  | Operation                     | Name      | Rows  | Bytes | Cost (%CPU)| Time     |

-------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT              |           |     1 |    47 |     2   (0)| 00:00:01 |

|   1 |  VIEW                         | V_TAB02   |     1 |    47 |     2   (0)| 00:00:01 |

|   2 |   UNION-ALL                   |           |       |       |            |          |

|   3 |    TABLE ACCESS BY INDEX ROWID| TA        |  4998 |   229K|    18   (0)| 00:00:01 |

|*  4 |     INDEX RANGE SCAN          | IDX_ID    |  4998 |       |    18   (0)| 00:00:01 |

|   5 |    TABLE ACCESS BY INDEX ROWID| TB        |  4998 |   229K|  5016   (1)| 00:01:01 |

|*  6 |     INDEX RANGE SCAN          | IDX_ID_TB |  4998 |       |    17   (0)| 00:00:01 |

-------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   4 - access("ID"<2500)

   6 - access("ID"<2500)

Note

-----

   - dynamic sampling used for this statement (level=2)

【Oracle】如何在查询视图时使用索引的更多相关文章

  1. Oracle分区表删除分区数据时导致索引失效解决

    https://blog.csdn.net/e_wsq/article/details/80896258

  2. oracle数据库表约束、视图、索引—该记录为本人以前微博的文章

    一.Oracle 数据库常用操作续关于创建表时创建约束1.创建表的时候增加约束----约束是定义表中的数据应该遵循的规则或者满足的条件----约束是建立在列上的,让某一列或者某几列数据之间有约束--- ...

  3. EF查询视图只得到一条记录

    1.出错结果:数据库表视图有多条数据,在使用EF框架进行查询时却只得到一条数据(注:拦截EF得到的sql语句在数据库进行查询并没有任务问题). 2.出错原因:该视图中没有ID或者主键,EF查询时进行反 ...

  4. Oracle学习总结_day06_视图&序列&索引

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! day 06 视图,索引,序列 视图 什么是视图: 视 ...

  5. oracle 10g 学习之视图、序列、索引、同义词(9)

    目标 通过本章学习,您将可以: l  描述视图 l  创建和修改视图的定义,删除视图 l  从视图中查询数据 l  通过视图插入, 修改和删除数据 l  使用“Top-N” 分析 l  创建, 维护, ...

  6. oracle 物化视图及创建索引

    物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询.这样对整体 ...

  7. SQL Server索引视图以(物化视图)及索引视图与查询重写

    本位出处:http://www.cnblogs.com/wy123/p/6041122.html 经常听Oracle的同学说起来物化视图,物化视图的作用之一就是可以实现查询重写,听起来有一种高大上的感 ...

  8. MariaDB 连接查询,视图,事物,索引,外键

    1.连接查询 --创建学生表 create table students ( id int unsigned not null auto_increment primary key, name var ...

  9. mariadb(四)连接查询,视图,事物,索引,外键

    一.连接查询 1)进入自己创建的zz数据库 2)创建学生表: create table students ( id int unsigned not null auto_increment prima ...

随机推荐

  1. thinkphp PATH_INFO支持

    如果发生在本地测试正常,但是一旦部署到服务器环境后会发生只能访问首页的情况,很有可能是你的服务器或者空间不支持PATH_INFO所致. 系统内置提供了对PATH_INFO的兼容判断处理,但是不能确保在 ...

  2. Linux/Mac中alias的使用

    最近在设置代理的时候,每次手写不方便,想起linux有个alias命令可以用,防止忘记,这边记录一下 一.alias 设置 1.设置别名 proxy # 1. # 设置别名前,使用 `type 自定义 ...

  3. SPOJ:[DIVCNT3]Counting Divisors

    题目大意:求1~N的每个数因子数的立方和. 题解:由于N过大,我们不能直接通过线性筛求解.我们可以采用洲阁筛. 洲阁筛的式子可以写成: 对于F(1~√n),可以直接线性筛求解. 对于,我们进行以下DP ...

  4. NX二次开发-UFUN创建圆锥UF_MODL_create_cone1

    NX11+VS2013 #include <uf.h> #include <uf_modl.h> UF_initialize(); //创建圆锥 UF_FEATURE_SIGN ...

  5. NX二次开发-通过点击按钮来控制显示工具条

    NX9+VS2012 1.打开D:\Program Files\Siemens\NX 9.0\UGII\menus\ug_main.men 找到装配和PMI,在中间加上一段 TOGGLE_BUTTON ...

  6. Centos7.5安装分布式Hadoop2.6.0+Hbase+Hive(CDH5.14.2离线安装tar包)

    Tags: Hadoop Centos7.5安装分布式Hadoop2.6.0+Hbase+Hive(CDH5.14.2离线安装tar包) Centos7.5安装分布式Hadoop2.6.0+Hbase ...

  7. 全面解读PHP面试

    php面试考察点    1.PHP基础知识 引用变量 常量及数据类型 运算符及流程控制 自定义函数及内部函数 正则表达式 文件及目录处理 会话控制 面向对象 网络协议 开发环境相关考点 2.JavaS ...

  8. super 关键字的使用及说明

    super 关键字主要用于访问父类的变量和方法. 代码示例: public class Student { String name; public Student(){ System.out.prin ...

  9. javascript和jQuery知识点总结

    attribute: $(”p”).addClass(css中定义的样式类型); 给某个元素添加样式 $(”img”).attr({src:”test.jpg”,alt:”test Image”}); ...

  10. mybatis 处理CLOB/BLOB类型数据

    BLOB和CLOB都是大字段类型. BLOB是按二进制来存储的,而CLOB是可以直接存储文字的. 通常像图片.文件.音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去.文章或者是较长的文字 ...