with as探討時小插曲
在與朋友談論with as語句的時候,網上說with as會生成臨時表這種說法是不負責的。
下面我們做個小例子
這是他的執行計劃,如果說cbo給你做臨時表了,那麼可能是由於oracle的一個bug給群眾誤導了... ...你想要知道到底給沒給你做臨時表看10053哦。
10053 中把這個sql做成了
SELECT "B"."EMPNO" "EMPNO","DEPT"."DNAME" "DNAME"
FROM "SCOTT"."EMP" "B","SCOTT"."DEPT" "DEPT"
WHERE "B"."DEPTNO"=20 AND "DEPT"."DEPTNO"=20
下面做了個hint走 物化檢視,查詢這個的時候3min都沒出來,我還以為sql上引起的問題... ...
id=6處是系統生成的物化檢視
看系統磁碟滿了,暈,當時做實驗會話sid是1
materialize這個hint是oracle沒有公開的提示,它指示ORACLE CBO在with子句內物化臨時表。這在oracle10g之後是沒有必要的,但是實際使用with時,如果發現沒有被物化,可以用此hint來強制oracle作此處理,使此子查詢(臨時表)只被處理一次。
結論:
在一定的情況下,我們可以用with與hint materialize結合的方式取代全域性臨時表和物化檢視來提高查詢效率,使用情況如下。
1. 當次查詢的結果記錄數不是太多的情況下,如果結果記錄集比較龐大,還是推薦使用GTT,因為那裡面可以指定索引等。
2. 查詢值和查詢過濾條件中如果含有重複執行的表示式,可以用此方式減少一次計算。
3. 相同子查詢被多次使用。
with後的子查詢如果多次被呼叫,並且oracle沒有作必要的transform那麼,我們可以用hint讓其物化住,如果一次呼叫,那麼沒必要做hint哦。
下面我們做個小例子
點選(此處)摺疊或開啟
- with a as (select * from dept) select * +MATERIALIZE * b.empno ,a.dname from emp b,a where a.deptno=b.deptno and a.deptno=20;
這是他的執行計劃,如果說cbo給你做臨時表了,那麼可能是由於oracle的一個bug給群眾誤導了... ...你想要知道到底給沒給你做臨時表看10053哦。
10053 中把這個sql做成了
SELECT "B"."EMPNO" "EMPNO","DEPT"."DNAME" "DNAME"
FROM "SCOTT"."EMP" "B","SCOTT"."DEPT" "DEPT"
WHERE "B"."DEPTNO"=20 AND "DEPT"."DEPTNO"=20
下面做了個hint走 物化檢視,查詢這個的時候3min都沒出來,我還以為sql上引起的問題... ...
id=6處是系統生成的物化檢視
看系統磁碟滿了,暈,當時做實驗會話sid是1
materialize這個hint是oracle沒有公開的提示,它指示ORACLE CBO在with子句內物化臨時表。這在oracle10g之後是沒有必要的,但是實際使用with時,如果發現沒有被物化,可以用此hint來強制oracle作此處理,使此子查詢(臨時表)只被處理一次。
結論:
在一定的情況下,我們可以用with與hint materialize結合的方式取代全域性臨時表和物化檢視來提高查詢效率,使用情況如下。
1. 當次查詢的結果記錄數不是太多的情況下,如果結果記錄集比較龐大,還是推薦使用GTT,因為那裡面可以指定索引等。
2. 查詢值和查詢過濾條件中如果含有重複執行的表示式,可以用此方式減少一次計算。
3. 相同子查詢被多次使用。
with後的子查詢如果多次被呼叫,並且oracle沒有作必要的transform那麼,我們可以用hint讓其物化住,如果一次呼叫,那麼沒必要做hint哦。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29990276/viewspace-1456185/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 課時3:小插曲之變數和字串變數字串
- windows建exp備份指令碼時的小插曲Windows指令碼
- PHP 呼叫 ES API 小插曲PHPAPI
- 清理session的小插曲(二)Session
- Java執行時繫結探討薦Java
- Promise探討Promise
- CListCtrl控制元件樣式設定時出現的小插曲!控制元件
- 深入探討 UndefinedUndefined
- IsPostBack深入探討
- 安裝win7的小插曲Win7
- pgpool-II-3.1.3 安裝小插曲
- 時序資料庫破局開放探討資料庫
- Spring Security 整合 微信小程式登入的思路探討Spring微信小程式
- PHP 轉 JAVA 篇 小插曲(環境篇)PHPJava
- PHP 轉 GO 篇 小插曲(環境篇)PHPGo
- 加殼技術探討-加殼時處理IAT
- px em rem 探討REM
- Oracle Stream 深入探討Oracle
- JdonFramework程式碼探討Framework
- Open Session In View 探討SessionView
- 小閃對話:微信長連線設計的探討(三)
- 小閃對話:微信長連線設計的探討(二)
- 深入探討單例模式單例模式
- cassandra查詢效率探討
- 前端工程架構探討前端架構
- AdobeFlashLite探討
- Oracle 技術探討3Oracle
- Oracle 技術探討2Oracle
- Oracle 技術探討1Oracle
- 責任鏈模式探討模式
- JavaScript原型鏈汙染探討JavaScript原型
- [Android] EditText設定只能輸入2位小數的探討Android
- 非技術探討:文章定時釋出功能如何實現
- 我的理解——關於“ERP過時論”的探討(轉)
- 深入探討ROP 載荷分析
- SQL優化器探討(zt)SQL優化
- Netty URL路由方案探討Netty路由
- Springboot 加密方案探討Spring Boot加密