<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 46.6\. 執行器 _執行器_接受規劃器/優化器創建的查詢規劃然后遞歸地處理它, 抽取所需要的行集合。它實際上是一個需求-拉動地流水線機制。每次調用一個規劃節點地時候, 它都必須給出更多的一個行,或者匯報它已經完成行的傳遞了。 為了提供一個具體的例子,假設頂端節點是一個`MergeJoin`節點。 在做任何融合之前,首先得抓取兩行(每個子規劃一行)。 因此執行器遞歸地調用自己來處理子規劃(它從附著在`lefttree`上的子規劃開始)。 新的頂端節點(左子規劃的頂端節點)假設是,一個`Sort`節點, 然后還是需要遞歸地獲取一個輸入行。`Sort`節點的子節點可能是一個`SeqScan` 節點,代表對一個表的實際讀取動作。這個節點的執行導致執行器從表中抓取一行然后把它返回給調用的節點。 `Sort`將不斷調用它的子節點以獲取需要排序的所有行。 在用盡輸入之后(由子節點返回一個 NULL 而不是一行表示),`Sort`代碼執行排序, 然后就可以返回它的第一個輸出行,也就是按照排序順序輸出的第一行。它仍然保持剩下的行的排序狀態, 這樣在隨后有需求的時候,它就可以按照排序順序返回這些行。 `MergeJoin`節點也會類似地要求從它的右邊子規劃獲取第一行。 然后它比較這兩行看看它們是否能連接;如果能,那么它給它的調用者返回一個連接行。 在下一次調用的時候,或者是在它無法連接當前的兩行的時候就是這次調用的時候, 它抓取其中一個表的下一行(抓取哪個表取決于比較結果如何),然后再檢查看看兩個表是否匹配。 最后,其中一個子規劃耗盡資源,而`MergeJoin`返回 NULL , 表明無法繼續生成更多的連接行。 復雜的查詢可能包含許多層的規劃節點,但是一般的過程都是一樣的: 每個節點在每次被調用的時候都計算并返回它的下一個輸出行。 每個節點同樣負責附加上任何規劃器賦予它的選擇或者投影表達式。 執行器機制是用于計算所有的四種基本 SQL 查詢類型的:`SELECT`,`INSERT`, `UPDATE`和`DELETE`。對于`SELECT`而言, 頂層的執行器代碼只是需要發送查詢規劃樹返回的每一行給客戶端。對于`INSERT`, 返回的每一行都插入到`INSERT`聲明的目標表中。也就是在一個名為`ModifyTable` 的特殊的頂級規劃節點執行。(一個簡單的`INSERT ... VALUES`命令創建一個簡單的規劃樹, 包含一個`Result`節點,它只計算得出一個結果行,并且`ModifyTable`執行這個插入。 但是`INSERT ... SELECT`可能需要執行器的全部能力。)對于`UPDATE`, 規劃器安排每個計算出來的行都包括所有更新的字段,加上原來的目標行的_TID_(元組ID或行ID); 這些數據輸入到一個`ModifyTable`節點,這個節點使用這些信息創建一個新的更新過的行, 并且標記舊行被刪除。對于`DELETE`,規劃實際上返回的唯一的一個字段是 TID , 然后`ModifyTable`節點簡單地使用這個 TID 訪問每個目標行,并且把它們標記為已刪除。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看