Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5962
  • 博文数量: 6
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 65
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-24 16:38
文章分类

全部博文(6)

文章存档

2009年(6)

我的朋友
最近访客

分类:

2009-12-24 17:03:05

ORACLE进阶之一:HINT 收藏
最近由于需要经常统计数据,需要经常用到hint,又不好意思每次都去麻烦DBA,所以在与DBA交流之后,整理了一份关于我们写ORACLE SQL语句时最常用到的hint使用方法:
另外,我们以前的流程都是等应用发布之前,统一提交DBA check,然后再由开发人员修改;

但是如果我们开发人员在写这些语句的时候可以知道这些hint的常规用法,这样在和dba check的时候会大大降低返工率,而且不止会知其然,还会知其所以然!

呵呵,何乐而不为呢!

hint中我们最常用到的有ordered、use_nl、use_hash、index、full这五种;

下面就介绍下这5种hint适用的主要场合:

1)use_nl主要用于在多表join的时候,nl的意思是nest loop,就是嵌套查询;

         规则为,根据参数中指定表名的顺序,根据where子句中的查询条件把所有记录都查出来,然后再循环这些记录与另外的表join;

         适应场合为:某表的查询结果集很小,而其他表的查询结果集很大;

         比如:select a.* from table1 a,table2 b where a.xx='1' and b.yy = '2' and a.x=b.x

         若根据a.xx='1'从table1中查询出来的结果集比根据b.yy = '2'从table2中查询出来的结果集小得多,则可以加上use_nl(a b);

         使用的时候将小结果集放前面,大结果集放后面;

2)use_hash可以看作是use_nl的兄弟,也是用于在多表join的时候,但是他不使用嵌套,而是用hash join;

         其规则和use_nl完全一样;

         适应场合为:各表的查询结果集都比较大,而且大小差不多;

         比如:select a.* from table1 a,table2 b where a.xx='1' and b.yy = '2' and a.x=b.x

       

阅读(181) | 评论(0) | 转发(0) |
0

上一篇:ORACLE进阶之一:HINT 收藏

下一篇:没有了

给主人留下些什么吧!~~