ORACLE進階之一:HINT
最近由於需要經常統計資料,需要經常用到hint,又不好意思每次都去麻煩DBA,所以在與DBA交流之後,整理了一份關於我們寫ORACLE SQL語句時最常用到的hint使用方法:
另外,我們以前的流程都是等應用釋出之前,統一提交DBA check,然後再由開發人員修改;
另外,我們以前的流程都是等應用釋出之前,統一提交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
若根據a.xx='1'從table1中查詢出來的結果集和根據b.yy = '2'從table2中查詢出來的結果集都比較大,而且大小差不多,則可以加上use_hash(a b);
3)ordered用於強制指定DB按照FROM子句中各表的先後順序進行資料查詢;
比如說SELECT A.* FROM TABLE1 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 table1 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的效率並不高,還不如用全表掃描;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25148509/viewspace-716033/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle hintOracle
- Docker進階與實踐之一:CgroupDocker
- ORACLE 部分HINTOracle
- oracle hint (續)Oracle
- Oracle Hint 精華Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(五)Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(四)Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(三)Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(二)Oracle
- 【TUNE_ORACLE】Oracle Hint之常用Hint功能概述(一)Oracle
- oracle之hint概述Oracle
- oracle常見hintOracle
- oracle hint簡述Oracle
- oracle hint (續-0)Oracle
- oracle hint_no_indexOracleIndex
- Oracle Hint 精華文章Oracle
- 常用的Oracle HintOracle
- Oracle Hint 詳解Oracle
- Oracle Hint的用法Oracle
- 技術進階的書籍清單之一
- oracle hint之hint_index_ffs,index_joinOracleIndex
- Java進階篇設計模式之一 —– 單例模式Java設計模式單例
- Java進階篇設計模式之一 ----- 單例模式Java設計模式單例
- ORACLE的HINT詳解Oracle
- Oracle中Hint隨記Oracle
- oracle hint no_mergeOracle
- oracle hint_no_expand_no_factOracle
- oracle hint_cache_nocacheOracle
- Oracle 常用HINT介紹Oracle
- (轉)Oracle Hint的用法Oracle
- oracle hint有效範圍Oracle
- ORACLE使用HINT的方法Oracle
- Oracle索引HINT的使用Oracle索引
- Oracle中的sql hintOracleSQL
- zt_Oracle hint driving_site Hint的用法Oracle
- ListView進階系列之一 內容順序淡淡顯示View
- Oracle中常見的Hint(一)Oracle
- Oracle之Hint使用總結Oracle