通常我们使用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 AS2   SELECT * FROM TA3  UNION ALL4    SELECT * FROM TB;View created.

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

yang@rac1> SELECT  * 2     FROM V_TAB3     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_TAB3     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_TAB3     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 AS2   SELECT * FROM TA t13  UNION ALL4    SELECT * FROM TB t2 ;View created.yang@rac1> SELECT /*+ index(tb  idx_id_tb) index(ta idx_id) */* 2     FROM V_TAB023     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_TAB023     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_TAB023     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)

转载于:https://www.cnblogs.com/emilyyoucan/p/7873041.html

【Oracle】如何在查询视图时使用索引相关推荐

  1. oracle查询视图时慢,oracle视图查询速度慢

    一般对视图的查询最好都分解为对数据表的 直接查询效果要好一些. 可以在参数文件中设置SHARED_POOL_RESERVED_SIZE参 数,这个参数在SGA共享池中保留一个连续的内存空间,连 续的内 ...

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

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

  3. oracle 视图能建索引吗,Oracle视图中建立索引注意事项.doc

    Oracle视图中建立索引的注意事项 在视图上创建索引需要三个条件:一.视图必须绑定到架构.要做到这点,在?CREATE?VIEW?语句中,必须加上?WITH?SCHEMABINDING,如果是使用企 ...

  4. oracle物化视图可以创建索引,oracle 物化视图及创建索引

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

  5. oracle视图如何创建索引,ORACLE 创建视图索引序列

    /* 视图View 视图是从若干基本表和(或)其他视图构造出来的表 视图存放的都是查询语句,并没有真实的数据 虚表 作用 限制对数据的操作 复杂查询变简单 提供相同数据的不同显示 UNION ALL ...

  6. ORACLE授权用户查询另一个用户下的表与视图

    实际应用中,会遇到在某个用户下需要查询另一个用户下的表数据或视图的情况,然而在没有授权时,会提示无权限操作的错误.那就需要通过授权处理后,再能进行查询操作,下面我们来看看是怎么处理的. 一.系统权限说 ...

  7. oracle 最大值及其_学习笔记:Oracle优化 SQL查询最大值 最小值时的优化方法案例...

    天萃荷净 select max(id),min(id) from table优化,分享开发DBA需求,在SQL语句查询最大值.最小值数据时的优化方式案例 1.查看数据库版本 SQL> selec ...

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

    SQL Server索引视图以(物化视图)及索引视图与查询重写 本文出处:http://www.cnblogs.com/wy123/p/6041122.html 经常听Oracle的同学说起来物化视图 ...

  9. access查询设计sol视图_Access删除索引

    新朋友点"Office交流网"蓝字关注我们 前面我们讲述过创建索引<access用DAO创建索引> http://www.office-cn.net/access- ...

最新文章

  1. Java反射机制分析指南
  2. linux 静态编译 yara
  3. php怎么上传函数,PHP单文件上传原理及上传函数的封装操作示例
  4. Python中集合(set)的操作及一些比较常见的用法
  5. [2018湖南省队集训] 6.28 T3 simulate
  6. C++笔记-QSslSocket::supportsSsl返回false(windows版的Qt不支持SSL)解决
  7. 编辑服务器上的文件,Sublime Text编辑远程Linux服务器上的文件
  8. php修改ip6地址为ip4,CentOS7 设置静态IPv6/IPv4地址
  9. Linux下内存使用率、CPU使用率、以及运行原理-转
  10. 机器学习算法概述——摘录《机器学习算法导论》
  11. excel中使用vlookup函数筛选时遇到#N/A 错误
  12. python三角函数公式计算_使用Python三角函数公式计算三角形的夹角案例
  13. 芯片测试的目的及原理介绍
  14. 云服务器无法连接怎么办
  15. Hive创建外部表详细步骤
  16. 零配置初始化流程就一直过不去_React TypeScript 从零实现 Popup 组件发布到 npm
  17. 电机控制系统php,步进电机调速控制系统资料(原理图+单片机源码)
  18. layUI laydate 时间选择器近一天、近一月、近三月、近一年
  19. ERP与PDM集成基本原理
  20. 数据中心光纤布线的发展趋势

热门文章

  1. python经典程序练习题-99道经典练习题助你全面掌握python基础知识,附技巧答案...
  2. python经典算法小程序-Python爬虫系列之微信小程序逆向某优选爬虫签名算法!厉害...
  3. python小项目实例流程-Python小项目:快速开发出一个简单的学生管理系统
  4. python画三维立体图-如何在论文中画出漂亮的插图?
  5. python爬虫图片-如何用Python来制作简单的爬虫,爬取到你想要的图片
  6. python是一门什么课程-为什么一定要让孩子学会一门编程语言?
  7. python月薪是多少-2019年 Python就业市场行情好不好, 薪资多少?
  8. python爬虫beautifulsoup实例-【Python实例二】BeautifulSoup爬虫简单实践
  9. python入门教程 官方-Python自学入门?
  10. 查看python安装路径-在cmd中查看python的安装路径方法