ORACLE高階之一 HINT

2021-04-14 14:40:23 字數 2680 閱讀 4239

最近由於需要經常統計資料,需要經常用到

hint

,又不好意思每次都去麻煩

dba,所以在與

dbaoracle 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 table

1 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 table

1 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);3

)ordered

用於強制指定

db按照

from

子句中各表的先後順序進行資料查詢

;比如說

select a.* from table

1 a, table2 b where a.x=b.x

……中新增了

/*+ordered */

,則標識

oracle

會強制先查詢

table1

中的記錄,然後再與

table2 join

;一般來說這個

hint

都是與use_nl

和use_hash

聯合使用的;比如

1)中的語句可以為

select /*+ordered use_nl(a b) */ a.* from table

1 a,table2 b where a.xx='1' and b.yy = '2' and a.x=b.x

4)index

主要用於

強制指定使用某個索引,一般選擇效率更高的索引

;

適應場合為:

where

子句中有幾個索引可供選擇、或者是用到了聯合索引中的第乙個字段;

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

若table1

中column1

和column2

兩個欄位都有索引,則可以強制指定使用哪個索引,比如

index(table1 table1_ind_column1)

5)full

用於指定全表掃瞄,這個實際中應用的較少;

按照dba

的說法,如果

使用index

查出來的結果集

>=

全表記錄的

25%,那麼使用

index

的效率並不高,還不如用全表掃瞄

oracle常用hint新增

1.檢視新增索引 formatted on 2020 1 6 下午 04 46 37 qp5 v5.163.1008.3004 select index view name.table01 name,index01 name index view name.table01 name,index01 ...

oracle調優HINT提示

提示 hint 從oracle7 中引入,目的是彌補基於成本優化器的缺陷。提示通常用來改變 sql執行計畫,提高執行效率。1.使用提示需要遵循的原則 1 仔細檢查提示語法。盡量使用完整注釋語法 hint 2 使用表別名。如果在查詢中指定了表別名,那麼提示必須也使用表別名。例如 select inde...

mac os高階之一

需求 1.macbook 現在rmb兌換港幣來算買港貨筆記本已經很便宜了 macbook 6800rmb左右 macbook pro大概7450rmb左右 air book初級版本7000rmb 如果打算在開發上有所為,無論你是像跟我一樣基於macos的開發,還是iphone,ipad的ios5開發...