ORACLE进阶之一:HINT (ZT)

hint中我们最常用到的有ordereduse_nluse_hashindexfull这五种;

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

1use_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)

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

2use_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

若根据a.xx='1'table1中查询出来的结果集和根据b.yy = '2'table2中查询出来的结果集都比较大,而且大小差不多,则可以加上use_hash(a b)

3ordered用于强制指定DB按照FROM子句中各表的先后顺序进行数据查询

比如说SELECT A.* FROM TABLE1 A, TABLE2 B WHERE A.X=B.X ……中添加了/*+ORDERED */,则标识oracle会强制先查询table1中的记录,然后再与table2 join

一般来说这个hint都是与use_nluse_hash联合使用的

比如1)中的语句可以为select /*+ORDERED use_nl(a b) */ a.* from table1 a,table2 b where a.xx='1' and b.yy = '2' and a.x=b.x

4index主要用于强制指定使用某个索引,一般选择效率更高的索引;

适应场合为:where子句中有几个索引可供选择、或者是用到了联合索引中的第一个字段;

比如select a.* from table1 where column1 = 'xx' and column2 = 'yy'

table1column1column2两个字段都有索引,则可以强制指定使用哪个索引,比如index(table1 table1_ind_column1)

5full用于指定全表扫描,这个实际中应用的较少;

按照DBA的说法,如果使用index查出来的结果集>=全表记录的25%,那么使用index的效率并不高,还不如用全表扫描

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7316690/viewspace-1020572/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7316690/viewspace-1020572/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值