(轉)執行計劃相關概念
※ 驅動表(driving table)和被探查表(probed table)的概念
驅動表又稱為外層表(outer table),這個概念用於巢狀與hash連線中,如果驅動表row source返回較多的行資料,則對所有的後續操作都有負面的影響,因為將大的row source作為驅動表時在後續的操作中返回的中間結果都比較大。這是比較容易理解的。
另外在驅動表的選擇上,應該選擇經限制條件選擇之後結果集比較小的row source作為驅動表,而不是單純選擇原始資料較小的資料表作為driving table。
驅動表的識別,在執行計劃那個,靠上的那個row source應該是驅動表,一般都是在from關鍵字後靠前位置的表。
※ 表之間的連線
目前為止,無論連線操作符如何,典型的連線型別有三種:
排序――合併連線(sort merge join(SMJ))
內部連線過程為:1,先生成驅動資料,然後對這些資料按照連線操作關聯列進行排序;2,生成被探查資料,然後對這些資料按照連線操作關聯列進行排序;3,對已經排序的兩個結果放在一起執行合併操作。
排序是一個費時、費資源的操作,特別對於大表。基於這個原因,SMJ經常不是一個特別有效的連線方法,但是如果2個row source都已經預先排序,則這種連線方法的效率也是比較高的。
優點:1,對於非等值連線,效果較高,2,如果關聯列上都有索引,效果更好;3,如果兩個row source都比較大,本方法要稍好於NL;4,如果返回的row source過大則又會導致過多的IO。
巢狀迴圈(Nested loops NL)
內部連線過程,是對驅動資料來源的每一行資料去遍歷被探查資料來源。
一個習慣性的指導原則是利用較小的資料來源作為驅動資料來源,因為遵循這種原則時nl連線查詢往往需要較少的IO次數,但也不盡然,有時又可能得到相反的結果,所以在判斷時需要根據查詢統計結果中實際執行的IO次數來判斷該選擇那個資料來源作為驅動資料來源。
習慣原則:如果驅動資料來源較小,並且在被探查資料來源上有唯一索引,或者有高選擇性的非唯一索引時,使用這種方法可以得到較好的效率。
另外,NL連線方法的一個優點是:可以返回已經連線的行,而不必等待所有的連線操作處理完成之後才返回資料,這可以實現快速的響應時間。
優點:如果驅動資料來源比較小,而且被探查資料來源有唯一索引或者高選擇性的非唯一索引,這種方法可以得到較好的效果;2,可以返回已經連線的行而不必等待所有的連線操作處理完才返回資料。
雜湊連線(Hash Join,HJ)
這種連線從理論上說比NL和SMJ更有效,而且只能在CBO優化器中。
較小的row source被用來構建hash table與bitmap,第二個row source被用來被hashed,並與第一個row source生成的hash table進行匹配,以便進行進一步的連線。Bitmap被用來作為一種比較快的查詢方法,來檢查在hash table中是否有匹配的行。
當hash table比較大而不能全部容納在記憶體中時,這種方法特別有用,而當hash join和bitmap可以被容納在記憶體中時這
種連線方式的效率極高。
需要設定hash_join_enabled=true和hash_area_size引數以使得hash連線高效執行。
優點:在兩個較大的row source之間連線時會取得較好的效率,在一個row source較小時會取得更好的效率;2,只能用於等值連線。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10701850/viewspace-539653/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle執行計劃相關Oracle
- 帶你輕鬆接觸Oracle執行計劃的相關概念Oracle
- Explain For理論執行計劃相關AI
- Java 多執行緒 相關概念Java執行緒
- 【sql調優之執行計劃】in相關的operationSQL
- 不等號影響執行計劃的相關實驗
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- 分析執行計劃最佳化SQLORACLE的執行計劃(轉)SQLOracle
- pg中與執行計劃相關的配置(ENABLE_*)引數
- MongoDB檢視執行計劃方法及相關欄位說明MongoDB
- java多執行緒核心api以及相關概念(一)Java執行緒API
- C#多執行緒學習(一) 多執行緒的相關概念C#執行緒
- C# 多執行緒學習(1) :多執行緒的相關概念C#執行緒
- Oracle資料庫關於SQL的執行計劃(轉)Oracle資料庫SQL
- 檢視oracle執行計劃 - 轉Oracle
- ORACLE中檢視執行計劃(轉)Oracle
- Java虛擬機器執行機制與相關概念Java虛擬機
- 執行計劃-1:獲取執行計劃
- ORACLE執行計劃的一些基本概念Oracle
- Oracle DB 相關常用sql彙總7【手工繫結sql執行計劃】OracleSQL
- 執行計劃
- Oracle9i 執行計劃(轉)Oracle
- 怎麼穩固執行計劃<轉>
- 關於索引的執行計劃記載索引
- oracle sqlprofile 固定執行計劃,並遷移執行計劃OracleSQL
- 【sql調優之執行計劃】獲取執行計劃SQL
- 晶片驗證的相關概念(轉載)晶片
- ORACLE柱狀圖與執行計劃(轉)Oracle
- 怎樣看懂Oracle的執行計劃[轉]Oracle
- oracle 10g執行計劃 (轉帖)Oracle 10g
- 執行緒池相關執行緒
- Docker相關概念Docker
- Scrum相關概念Scrum
- SYBASE執行計劃
- MySQL 執行計劃MySql
- MySQL執行計劃MySql
- sql 執行計劃SQL
- ORACLE執行計劃Oracle