SQL語句的4個階段
一個完成的SQL語句,從發出到最後返回記錄集,一共經歷4個階段:
解析:這個階段要進行語義和語法分析、許可權檢查, 內容包括語句是否拼寫正確、資料庫物件是否存在、使用者是否有
物件的訪問許可權,這些檢查透過後,進入到下一個階段;
最佳化:這一階段是根據物件的統計資訊,資料的最佳化器模式(CBO/RBO)來確定最佳訪問路徑;
產生執行計劃:這一階段根據上一階段產生的訪問路徑,生成最終的執行計劃;
產生結果:依據上一步的執行計劃,訪問資料,產生結果集,返回給使用者;
備註:SQL效能調整的方法:
1. 減少解析
使用繫結變數,如果語句經過1,2,3步叫硬解析,如果使用了繫結變數,就省去了第2,3步,這種叫做軟解析。
2. 訪問路徑
(1) 單表訪問:index和全表掃描的比較
當要訪問的記錄數和總記錄數比值<0.1%,則index訪問才有意義;
當結果集和記錄總數的比值>20%,一定要使用全表掃描。
當結果集和記錄總數的比值在0.1%~20%之間,自行取捨。
(2) 多表連線
(A) NEST LOOP: 選擇一個資料量較少的表作為驅動表,然後拿驅動表的每一條記錄去和另外一張表的所有記錄做一次遍歷,取出符合where條件的記錄。
特點: 返回第一條記錄的速度非常快,不需要排序,可以用作非等值連線。
(B) SORT MERGE:對每個表進行排序,然後連個排序集進行一次遍歷,取出記錄集。
特點: 每個表都要排序,排序後兩個表都只需要做一次遍歷。
(C) HASH JOIN: 準備階段: 驅動表的連線欄位進行HASH操作,產生一系列的HASH BUCKET;
探測階段: 被驅動表的連線欄位,執行相同的HASH函式,根據結果到驅動表的HASH同種檢查。
多表連線的3中連線方式的比較:
HASH JOIN演算法要優於SORT MERGE演算法,HASH JOIN 很類似NEST LOOP,但是由於NEST LOOP,因為HASH table是構建在PGA中的,對他的訪問不需要LATCH等機制的共享保護。
HASH JOIN > NEST LOOP > SORT MERGE
參考文獻:
《大話ORACLE RAC》第14章-效能與RAC
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9252210/viewspace-609898/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 處理DML語句的幾個階段
- MySQL SQL語句查詢執行過程的四個階段介紹MySql
- mysql如何處理億級資料,第一個階段——優化SQL語句MySql優化
- 常用sql進階語句SQL
- 一個SQL語句的優化SQL優化
- C語言學習的幾個階段C語言
- 如何寫這個sql語句?SQL
- 單條SQL語句實現複雜邏輯的幾個例子(4)SQL
- 初學Java的5個階段,你在哪個階段?Java
- PLSQL Language Referenc-4PL/SQL控制語句-條件選擇語句-IF THENSQL
- SQL語句SQL
- Java中如何解析SQL語句、格式化SQL語句、生成SQL語句?JavaSQL
- SQL語句IN的用法SQL
- 常用的SQL語句SQL
- 常用的SQL 語句SQL
- SQL 語句 as 的用法SQL
- oracle的sql語句OracleSQL
- 單個SQL語句的10046 traceSQL
- 幾個定位、查詢session的sql語句SessionSQL
- 一個頗有意思的SQL語句SQL
- 初級進階版SQL語句總結(1)SQL
- 用SQL語句統計IP地址前三段 (轉)SQL
- 單條SQL語句實現複雜邏輯的幾個例子(4)續~SQL
- 記一個實用的sql查詢語句SQL
- Oracle AWR中常用到的幾個SQL語句OracleSQL
- 貼一個求表空間的sql 語句SQL
- 一個經典的查詢及其SQL語句SQL
- 一個JTextPane寫SQL語句的問題SQL
- 一個題目涉及到的50個Sql語句SQL
- sql 中的with 語句使用SQL
- SQL語句的優化SQL優化
- sql語句的簡化SQL
- 實用的SQL語句~!SQL
- sql語句大全SQL
- 共享SQL語句SQL
- SQL語句整理SQL
- SQL基本語句SQL
- 精妙Sql語句SQL