SQL語句的4個階段

zhanglei_itput發表於2009-07-22

 

一個完成的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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章