Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1117775
  • 博文数量: 151
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3595
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-30 13:00
个人简介

About me:Oracle ACE,optimistic,passionate and harmonious. Focus on oracle programming,peformance tuning,db design, j2ee,Linux/AIX,web2.0 tech,etc

文章分类

全部博文(151)

文章存档

2024年(6)

2023年(28)

2022年(43)

2020年(62)

2014年(3)

2013年(9)

分类: Oracle

2023-05-08 15:33:16

HINTS之查询块query block:
  对于不在同一层的,不能直接用HINTS来访问,比如这个例子的子查询b与a不在同一层,内部使用query block实现,诸如SEL$n,DEL$n,UPD$n,MRG$n,然后用@query_block访问,如例子中的LEADING(@"SEL$5DA710D3" "B"@"SEL$2" "A"@"SEL$1")

HINTS之自定义query block:
  
自定义查询块使用qb_name hints,然后访问是用别名@query_block,实现hints可以引用不在同一层的对象。

SELECT/*+leading(b@subq,a) use_hash(a)*/ * FROM a

WHERE exists

(SELECT/*+qb_name(subq)*/ 1 FROM b

 WHERE a.object_id = b.object_id);



HINTS失效的场景:
1)
HINTS要使用别名,否则失效
2)
对于视图对象的hints,要用视图别名.对象别名
3)
语义不正确的,如果使用hints可能结果不对
4)
优化器觉得hints不好的
5)
HINTS未被采用有很多情况,主要是符合语法语义以及对应hints使用场景。

看下面两个例子的区别:


 使用hints能否用上索引,要看语义是否正确,因为OBJECT_ID没有NOT NULL约束,强制使用hints无效。

阅读(398) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~