Atitit sql執行計畫

2021-09-07 07:57:03 字數 3506 閱讀 2266

atitit sql執行計畫

執行計畫是資料庫根據sql語句和相關表的統計資訊作出的乙個查詢方案,這個方案是由查詢優化器自動分析產生的

oracle中的執行計畫顯示在執行一條sql語句時必須執行的詳細步驟,通常以**形式呈現,但其實是樹形結構。檢視oracle中的執行計畫一般有以下幾種方法(包括但不限於)。

不要把sql語句寫得太複雜

我經常看到,從資料庫中捕捉到的一條sql語句列印出來有2張

a4紙這麼長。一般來說這麼複雜的語句通常都是有問題的。我拿著這

2頁長的

sql語句去請教原作者,結果他說時間太長,他一時也看不懂了。可想而知,連原作者都有可能看糊塗的

sql語句,資料庫也一樣會看糊塗。

一般,將乙個select語句的結果作為子集,然後從該子集中再進行查詢,這種一層巢狀語句還是比較常見的,但是根據經驗,超過

3層巢狀,查詢優化器就很容易給出錯誤的執行計畫。因為它被繞暈了。像這種類似人工智慧的東西,終究比人的分辨力要差些,如果人都看暈了,我可以保證資料庫也會暈的。

既然是計畫,那麼絕對不是把這個語句先執行一遍,然後把這個計算出來,那樣的話這個執行計畫就成了事後諸葛亮了。

這個執行計畫是oracle根據統計資訊得到的。那麼這個執行計畫就有可能不准,請大家看看我的語句以及執行出來的結果:

現在可以總結一下了:執行計畫的準確性(主要指資料返回,資料量大小)由統計資訊的準確性決定

怎麼樣?絕對不是

6行那麼點點東西吧?這個表的統計資訊看來非常非常舊了。於是我對兩個表重新進行統計:

analyze

table

test

compute

statistics;

explain  select……

變體:1. explain extended select……

將執行計畫「反編譯」成select語句,執行show warnings 可得到被mysql優化器優化後的查詢語句2. explain partitions select……

用於分割槽表的explain

執行計畫包含的資訊

表示查詢中每個select子句的型別(簡單 or複雜)

a.******:查詢中不包含子查詢或者union

b.查詢中若包含任何複雜的子部分,最外層查詢則被標記為:primary

c.在select或where列表中包含了子查詢,該子查詢被標記為:subquery

d.在from列表中包含的子查詢被標記為:derived(衍生)

e.若第二個select出現在union之後,則被標記為union;若union包含在  from子句的子查詢中,外層select將被標記為:derived

f.從union表獲取結果的select被標記為:union result

表示mysql在表中找到所需行的方式,又稱「訪問型別」,常見型別如下:

由左至右,由最差到最好

a.all:full table scan, mysql將遍歷全表以找到匹配的行

b.index:full index scan,index與all區別為index型別只遍歷索引樹

當游標指向每個節點時,該節點將顯示下表中所述的工具提示資訊。並非圖形執行計畫中的所有節點都包含此處介紹的全部工具提示項。

工具提示項

說明

physical operation

使用的物理運算子,例如 hash join

或 nested loops

。以紅色顯示的物理運算子表示查詢優化器已發出警告,例如丟失列統計資訊或丟失聯接謂詞。這可能導致查詢優化器選擇比預期的效率低的查詢計畫。有關列統計資訊的詳細資訊,請參閱

使用統計資訊提高查詢效能

。當圖形執行計畫建議建立統計資訊、更新統計資訊或建立索引時,使用 sql server management studio

物件資源管理器中的快捷選單可以立即建立或更新丟失的列統計資訊和索引。有關詳細資訊,請參閱

索引操作指南主題

。logical operation

與物理運算子匹配的邏輯運算子,如 inner join

運算子。邏輯運算子列在物理運算子之後,兩者均位於工具提示的頂部。

estimated row size

操作符生成的行的估計大小(位元組)。

estimated i/o cost

用於執行操作的所有 i/o

活動的估計開銷。此值應盡可能低。

estimated cpu cost

用於執行操作的所有 cpu

活動的估計開銷。

estimated operator cost

用於執行此操作的查詢優化器的開銷。此操作的開銷以佔查詢總開銷的百分比的形式顯示在括號中。由於查詢引擎選擇最高效的操作來執行查詢或執行語句,因此此值應盡可能低。

estimated subtree cost

查詢優化器執行此操作及同一子樹內位於此操作之前的所有操作的總開銷。

estimated number of rows 1

運算子生成的行數。

顯示圖形執行計畫 (sql server management studio).htm

(imp ,only ok 20 pct,remain 80 pct to see))寫sql要學會使用'執行計畫' - 鵬霄萬里展雄飛 - 部落格頻道 - csdn.net.htm

(imp 20 pct now )sql server執行計畫的理解 - 逆心 - .htm

簡介如何檢視執行計畫以及執行計畫的準確性 - wingsless - .htm

作者:: 綽號:

老哇的爪子claw

of eagle

偶像破壞者iconoclast

image-smasher

捕鳥王"

bird

catcher

王中之王king of kings

虔誠者pious

宗教信仰

捍衛者defender

of the faith

.卡拉卡拉

紅斗篷caracalla

red cloak

簡稱::emir

attilax

akbar

埃公尺爾阿提拉克斯

阿克巴全名:

:emir

attilax

akbar 

bin

mahmud

bin  attila bin

solomon

al rapanui 

埃公尺爾阿提拉克斯

阿克巴本

馬哈茂德

本阿提拉

本所羅門

阿爾 拉帕努伊 

常用名:艾提拉(

艾龍),

email:[email protected]

attilax的專欄  

--atiend

ocacle 執行計畫 Oracle執行計畫

一 什麼是oracle執行計畫?執行計畫是一條查詢語句在oracle中的執行過程或訪問路徑的描述 二 怎樣檢視oracle執行計畫?因為我一直用的plsql遠端連線的公司資料庫,所以這裡以plsql為例 配置執行計畫需要顯示的項 工具 首選項 視窗型別 計畫視窗 根據需要配置要顯示在執行計畫中的列 ...

mysql執行計畫 MySQL 執行計畫

1.執行計畫的定義 什麼是執行計畫 查詢計畫 呢?執行計畫就是一系列的操作步驟。sql是宣告性語言,它只告訴資料庫要查詢什麼,但並不告訴資料庫如何去查。資料庫所要做的就是基於演算法和統計資訊計算出一條最佳的訪問路徑。這個工作是由優化器來完成的。優化器會比較不同的執行計畫,然後選擇其中最優的一套。2....

mysql 生成執行計畫 MySQL執行計畫

和很多其他關係型資料庫不通,mysql並不會在生成查詢位元組碼來執行查詢。mysql生成查詢的一棵指令樹,然後通過儲存引擎執行完成這棵指令樹並返回結果。最終的執行計畫包含了重構查詢的全部資訊。如果某個查詢執行explain extended 之後,在執行show warnings,就可以看到重構出的...