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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 常用sql進階語句SQL
- mysql如何處理億級資料,第一個階段——優化SQL語句MySql優化
- 單個SQL語句的10046 traceSQL
- Java中如何解析SQL語句、格式化SQL語句、生成SQL語句?JavaSQL
- SQL語句SQL
- SQL語句IN的用法SQL
- [20210407]分析sql語句的共享記憶體段3.txtSQL記憶體
- C語言學習的幾個階段C語言
- 【SQL】9 SQL INSERT INTO 語句SQL
- 【SQL】10 SQL UPDATE 語句SQL
- 【SQL】11 SQL DELETE 語句SQLdelete
- sql常用語句SQL
- SQL SELECT 語句SQL
- 記一個實用的sql查詢語句SQL
- [20220120]超長sql語句補充4.txtSQL
- 初學Java的5個階段,你在哪個階段?Java
- 分享一個查詢某個使用者過去一段時間內執行的SQL語句。SQL
- SQL 語句的注意事項SQL
- sql語句如何執行的SQL
- MySQL中常用的SQL語句MySql
- sqlserver dba常用的sql語句SQLServer
- sql宣告變數,及if -else語句、while語句的用法SQL變數While
- MySQL 52個SQL效能優化策略SQL語句彙總MySql優化
- 1.3. SQL 語句SQL
- Oracle基本SQL語句OracleSQL
- Sql語句小整理SQL
- SQL語句優化SQL優化
- SQL 語句學習SQL
- 14 個 SQL 拿來就用語句例項!SQL
- 50個SQL語句(MySQL版) 問題十四MySql
- Mysql 資料庫 -------- SQL語句進階查詢 ------- 前部分MySql資料庫
- 資料庫常用的sql語句大全--sql資料庫SQL
- Oracle SQL精妙SQL語句講解OracleSQL
- mysql基礎複習(SQL語句的四個分類),MySql
- MySql和簡單的sql語句MySql
- SQL語句規範的寫法SQL
- 簡單的SQL語句學習SQL
- 優化 SQL 語句的步驟優化SQL
- mysql的sql語句執行流程MySql