(轉)執行計劃相關概念
※ 驅動表(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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- Oracle資料庫關於SQL的執行計劃(轉)Oracle資料庫SQL
- [20240313]toad gather_plan_statistics執行計劃相關問題.txt
- pg中與執行計劃相關的配置(ENABLE_*)引數
- java多執行緒核心api以及相關概念(一)Java執行緒API
- Java虛擬機器執行機制與相關概念Java虛擬機
- 執行計劃-1:獲取執行計劃
- Oracle DB 相關常用sql彙總7【手工繫結sql執行計劃】OracleSQL
- 晶片驗證的相關概念(轉載)晶片
- AirNet系統航跡和飛行計劃相關AI
- 執行緒池相關執行緒
- MySQL執行計劃MySql
- SYBASE執行計劃
- MySQL 執行計劃MySql
- Docker相關概念Docker
- 多執行緒程式設計相關理論執行緒程式設計
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- 【系統設計】併發相關概念
- 05計算機網路相關概念計算機網路
- 計劃自動相關條件
- 多執行緒相關整理執行緒
- Linux執行python相關指令LinuxPython
- MySQL執行計劃解析MySql
- mysql explain 執行計劃MySqlAI
- explain執行計劃分析AI
- mysql執行計劃explainMySqlAI
- oracle 固定執行計劃Oracle
- Oracle sql執行計劃OracleSQL
- 執行計劃執行步驟原則
- 計算機指令集的相關概念計算機
- 用 PHP 來執行執行網路相關命令PHP
- 【PG執行計劃】Postgresql資料庫執行計劃統計資訊簡述SQL資料庫
- 『現學現忘』Docker相關概念 — 1、雲端計算概念Docker
- 多執行緒相關問題執行緒
- 執行緒池相關複習執行緒
- 155 執行緒的相關操作執行緒
- mongodb執行計劃解釋MongoDB
- 檢視 OceanBase 執行計劃
- MySQL執行計劃解析(四)MySql