【Oracle】如何在查询视图时使用索引
通常我们使用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】如何在查询视图时使用索引相关推荐
- oracle查询视图时慢,oracle视图查询速度慢
一般对视图的查询最好都分解为对数据表的 直接查询效果要好一些. 可以在参数文件中设置SHARED_POOL_RESERVED_SIZE参 数,这个参数在SGA共享池中保留一个连续的内存空间,连 续的内 ...
- oracle 10g 学习之视图、序列、索引、同义词(9)
目标 通过本章学习,您将可以: l 描述视图 l 创建和修改视图的定义,删除视图 l 从视图中查询数据 l 通过视图插入, 修改和删除数据 l 使用"Top-N" 分析 ...
- oracle 视图能建索引吗,Oracle视图中建立索引注意事项.doc
Oracle视图中建立索引的注意事项 在视图上创建索引需要三个条件:一.视图必须绑定到架构.要做到这点,在?CREATE?VIEW?语句中,必须加上?WITH?SCHEMABINDING,如果是使用企 ...
- oracle物化视图可以创建索引,oracle 物化视图及创建索引
物化视图是一种特殊的物理表,"物化"(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语 ...
- oracle视图如何创建索引,ORACLE 创建视图索引序列
/* 视图View 视图是从若干基本表和(或)其他视图构造出来的表 视图存放的都是查询语句,并没有真实的数据 虚表 作用 限制对数据的操作 复杂查询变简单 提供相同数据的不同显示 UNION ALL ...
- ORACLE授权用户查询另一个用户下的表与视图
实际应用中,会遇到在某个用户下需要查询另一个用户下的表数据或视图的情况,然而在没有授权时,会提示无权限操作的错误.那就需要通过授权处理后,再能进行查询操作,下面我们来看看是怎么处理的. 一.系统权限说 ...
- oracle 最大值及其_学习笔记:Oracle优化 SQL查询最大值 最小值时的优化方法案例...
天萃荷净 select max(id),min(id) from table优化,分享开发DBA需求,在SQL语句查询最大值.最小值数据时的优化方式案例 1.查看数据库版本 SQL> selec ...
- SQL Server索引视图以(物化视图)及索引视图与查询重写
SQL Server索引视图以(物化视图)及索引视图与查询重写 本文出处:http://www.cnblogs.com/wy123/p/6041122.html 经常听Oracle的同学说起来物化视图 ...
- access查询设计sol视图_Access删除索引
新朋友点"Office交流网"蓝字关注我们 前面我们讲述过创建索引<access用DAO创建索引> http://www.office-cn.net/access- ...
最新文章
- Java反射机制分析指南
- linux 静态编译 yara
- php怎么上传函数,PHP单文件上传原理及上传函数的封装操作示例
- Python中集合(set)的操作及一些比较常见的用法
- [2018湖南省队集训] 6.28 T3 simulate
- C++笔记-QSslSocket::supportsSsl返回false(windows版的Qt不支持SSL)解决
- 编辑服务器上的文件,Sublime Text编辑远程Linux服务器上的文件
- php修改ip6地址为ip4,CentOS7 设置静态IPv6/IPv4地址
- Linux下内存使用率、CPU使用率、以及运行原理-转
- 机器学习算法概述——摘录《机器学习算法导论》
- excel中使用vlookup函数筛选时遇到#N/A 错误
- python三角函数公式计算_使用Python三角函数公式计算三角形的夹角案例
- 芯片测试的目的及原理介绍
- 云服务器无法连接怎么办
- Hive创建外部表详细步骤
- 零配置初始化流程就一直过不去_React TypeScript 从零实现 Popup 组件发布到 npm
- 电机控制系统php,步进电机调速控制系统资料(原理图+单片机源码)
- layUI laydate 时间选择器近一天、近一月、近三月、近一年
- ERP与PDM集成基本原理
- 数据中心光纤布线的发展趋势
热门文章
- python经典程序练习题-99道经典练习题助你全面掌握python基础知识,附技巧答案...
- python经典算法小程序-Python爬虫系列之微信小程序逆向某优选爬虫签名算法!厉害...
- python小项目实例流程-Python小项目:快速开发出一个简单的学生管理系统
- python画三维立体图-如何在论文中画出漂亮的插图?
- python爬虫图片-如何用Python来制作简单的爬虫,爬取到你想要的图片
- python是一门什么课程-为什么一定要让孩子学会一门编程语言?
- python月薪是多少-2019年 Python就业市场行情好不好, 薪资多少?
- python爬虫beautifulsoup实例-【Python实例二】BeautifulSoup爬虫简单实践
- python入门教程 官方-Python自学入门?
- 查看python安装路径-在cmd中查看python的安装路径方法