官术网_书友最值得收藏!

5.1 解析步驟

圖5-1是Oracle官方文檔的中SQL解析步驟。我們看一下解析過程做了哪些操作。

圖5-1中涉及的命令及含義如下。

·Syntax Check:語法檢查。數據庫會檢查SQL語句的語法拼寫,以保證是其一個有效的SQL語句。常見的錯誤是拼寫錯誤,如將FROM寫成FORM。

·Semantic Check:語義檢查。數據庫會對SQL語句進行語義分析,其中包括對象的有效性、是否有訪問權限等。

·Shared Pool Check:數據庫首先將SQL文本轉化為ASCII字符,然后根據哈希算法計算其對應的值(就是對應于V$SQL.SQL_ID)。根據計算出的這個值到共享池中的一個區域(就是library cache)中找到對應的一塊結構(又稱bucket),然后比較bucket里是否存在該SQL語句。如果找到該語句,則返回對應的執行計劃(可能有多個,需要選擇一個)。如果沒有找到,則進入硬解析的過程。

·Hard Parse:即硬解析。如果數據庫無法在內存中找到這條語句,則需要經歷一個硬解析的過程。在這個過程中需要申請一塊內存空間(并通過名叫latch的結構保證不被別人訪問)。同時,需要訪問數據字典獲得對象必要的信息。

·Soft Parse:除去Hard Parse,都可以稱為Soft parse。

·Optimization:在這一階段,數據庫會根據很多因素由優化器生成最優的執行計劃。

·Row Source Generation:所謂“Row Source”,是指在上面的執行計劃中每一步采用什么樣的方法去關聯、獲得數據。Row Source可能對應于表、視圖、結果集、表關聯操作、分組操作等。最終結果是一棵樹的形態。

·Execution:這一步就是執行器根據Row Source樹的每一步去執行。

圖5-1 SQL 解析步驟

主站蜘蛛池模板: 文成县| 刚察县| 桐城市| 泽库县| 九江县| 泽库县| 合山市| 凯里市| 广南县| 鄂伦春自治旗| 菏泽市| 沙雅县| 潍坊市| 长顺县| 县级市| 扎赉特旗| 米泉市| 峨山| 内黄县| 牙克石市| 六盘水市| 颍上县| 丘北县| 赤城县| 万全县| 湖北省| 太保市| 密山市| 吴桥县| 水富县| 乐至县| 新闻| 马龙县| 新疆| 大荔县| 千阳县| 南木林县| 新余市| 依兰县| 武鸣县| 西充县|