最近由於需要經常統計資料,需要經常用到
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開發...