drop table t1;
drop table t2;
drop table t3;
drop view v_3;create table t1
(f1 integer,
f2 varchar2(10));create table t2
(f1 integer,
f2 varchar2(10));
create index ind_t2 on t2(f2);create table t3
(f1 integer,
f2 varchar2(10));
create index ind_t3 on t3(f2);
create or replace view v_3
as
select f1,f2 from t2
union all
select f1,f2 from t3
-- 如何让下面的查询用到t2,t3上的索引select /*+ordered use_nl(t1,v_3)*/t1.*
from t1,v_3
where t1.f1 = 1
and t1.f2 = v_3.f2
drop table t2;
drop table t3;
drop view v_3;create table t1
(f1 integer,
f2 varchar2(10));create table t2
(f1 integer,
f2 varchar2(10));
create index ind_t2 on t2(f2);create table t3
(f1 integer,
f2 varchar2(10));
create index ind_t3 on t3(f2);
create or replace view v_3
as
select f1,f2 from t2
union all
select f1,f2 from t3
-- 如何让下面的查询用到t2,t3上的索引select /*+ordered use_nl(t1,v_3)*/t1.*
from t1,v_3
where t1.f1 = 1
and t1.f2 = v_3.f2
解决方案 »
- 安装Oracle11GR2:用VMware装的CentOS,想在其上安装Oracle11GR2,到了最后的检测出现如下错误
- 数据库登陆错误
- plsql块报错
- 我用oracle9i客户端精简版连接服务器成功了,但是输入sql时候,错误提示后米娜都是问号?
- oracle如何创建job
- 連接oracle出錯???
- 监听无法配置和启动, 各位帮忙, 谢谢
- 那位老兄能给一个建序列的例子,万分感谢!
- oci 接口执行对数据库表的select,出现错误:ora-01007 选择列表中没有变量?而我在sqlplus中可以执行对此表的select 操作,问题不知出
- 万分紧急,诸位大虾帮帮我这个笨老赵,在线等候~~~~
- 百分向suiziguo大哥题个小问题
- 百分求解一个小问题
from t1,v_3
where t1.f1 = 1
and t1.f2 = v_3.f2
----------------------------
你加了上面的hint的话,oracle会倾向于走索引进行nested loop关联的,
除非你的视图中某个表在对应字段上没有索引,这时视图中其他表也将会走全表扫描。比如你drop掉ind_t2后,再看执行计划。
SELECT STATEMENT, GOAL = CHOOSE CPU 耗费=0 IO 耗费=6 耗费=6 基数=1 字节=27
NESTED LOOPS CPU 耗费=0 IO 耗费=6 耗费=6 基数=1 字节=27
TABLE ACCESS FULL 对象名称=T1 对象别名=T1@SEL$1 CPU 耗费=0 IO 耗费=2 耗费=2 基数=1 字节=20
VIEW 对象名称=V_3 对象别名=V_3@SEL$1 CPU 耗费=0 IO 耗费=4 耗费=4 基数=1 字节=7
UNION-ALL
TABLE ACCESS FULL 对象名称=T3 对象别名=T3@SEL$2 CPU 耗费=0 IO 耗费=2 耗费=2 基数=1 字节=7
TABLE ACCESS FULL 对象名称=T2 对象别名=T2@SEL$3 CPU 耗费=0 IO 耗费=2 耗费=2 基数=1 字节=7所以,你必须保证索引中所有原表在关联字段上都要有索引。