06 SQL執行計畫

2021-09-08 10:39:59 字數 1663 閱讀 1126

解釋計畫 與 執行計畫的 區別

隨著可以得到解釋計畫輸出的開發工具, 比如 toad 的普遍使用, 生成解釋計畫就變的相當簡單. 而不簡單的是得到執行計畫.

解釋計畫

explain plan 用來顯示優化器為sql語句所選擇的執行計畫. 你需要了解一件事, 當你得到了解釋計畫輸出的時候, 你其實是得到了當sql語句執行的時候應該採用的預期執行計畫. 你並沒有得到實際的執行計畫以及與其相關的資料來源執行統計資訊. 你所得到的只是估計值, 而不是實際值. 在下面, 我將通過將估計的資訊成為解釋計畫輸出而把實際資訊成為執行計畫輸出來區分實際的和預期的執行計畫.

解釋計畫輸出最令人沮喪的地方就是它與實際執行時所使用的計畫可能是不一致的. 使用解釋計畫的時候有以下3點可能導致計畫輸出與實際執行計畫不一致的地方.

解釋計畫不考慮繫結變數的資料型別並假設所有的繫結變數都是字串型別的方式. 然而, 當語句真正執行的時候所準備的執行計畫卻要考慮資料型別. 需要牢記的乙個預期行為: 謂語(where語句中的那些條件)必須嚴格匹配索引定義, 否則不會使用索引.

閱讀計畫

按照執行計畫的順序顯示

解釋計畫輸出中最有用的部分之一就是被稱為謂語資訊的部分, 在這個部分中, 將會示出 access_predicates 和 filter_predicates 列, 這兩列與計畫運算列表中的一行(用id列來指示)相關, 你會發現計畫中每乙個有相關的訪問或篩選謂語的運算, 在其id的旁邊都有乙個星號(*), 當你看到星號的時候, 你就知道要在謂語資訊部分尋找id號來確定哪個謂語(where子句中的條件) 是與該運算相關的. 通過使用這些資訊你就可以確認用來進行索引訪問的列是正確(或不正確)的, 並且可以確定在**進行了條件過濾.

較晚的進行過濾時常見的效能抑制劑.

執行計畫

當一條sql語句執行的時候將會生成該語句的實際執行計畫. 在語句被硬解析之後, 所選的執行計畫就會被存到庫告訴快取中以便以後使用. 可以通過查詢 v$sql_plan來檢視計畫運算.

查詢最近生成的sql語句: v$sql

檢視相關執行計畫

有好幾種方法可以用來檢視任何值錢已經執行過的sql語句儲存在庫快取記憶體中的執行計畫.

1. 利用 dbms_xplan.display_cursor 函式

select /*+ gather_plan_statistics */ empno, ename from scott.emp where ename = 『king』;

set serveroutput off

select * from table(dbms_xplan.display_cursor(null, null, 『allstats last』));

SQL執行計畫

引言 實際專案開發中,由於我們不知道實際查詢的時候資料庫裡發生了什麼事情,資料庫軟體是怎樣掃瞄表 怎樣使用索引的,因此,我們能感知到的就只有 sql語句執行的時間,在資料規模不大時,查詢是瞬間的,因此,在寫sql語句的時候就很少考慮到效能的問題。但是當資料規模增大,如千萬 億的時候,我們運 行同樣的...

SQL 執行計畫

使用explain關鍵字可以模擬優化器執行sql查詢語句,從而知道mysql是如何處理你的sql語句的。分析你的查詢語句或是表結構的效能瓶頸 l 表的讀取順序 l 資料讀取操作的操作型別 l 哪些索引可以使用 l 哪些索引被實際使用 l 表之間的引用 l 每張表有多少行被優化器查詢 explian ...

Sql優化 執行計畫

一段sql 寫好以後,可以通過檢視sql的執行計畫,初步 該sql在執行時的效能好壞,尤其是在發現某個sql語句的效率較差時,我們可以通過檢視執行計畫,分析出該sql 的問題所在。1 開啟熟悉的檢視工具 pl sql developer。在pl sql developer中寫好一段sql 後,按f5...