<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>

                [TOC] # COUNT COUNT 算子用于兼容 Oracle 的 ROWNUM 功能,實現 ROWNUM 表達式的自增操作。 在一般場景下,當 SQL 查詢含有 ROWNUM 時,SQL 優化器就會在生成執行計劃的時候分配一個 COUNT 算子。當然在一些情況下,SQL 優化器會將含有 ROWNUM 的 SQL 改寫為 LIMIT 算子,這時就不會再分配 COUNT 算子。 ## 正常分配 COUNT 算子的場景 示例 1:含有 ROWNUM 的 SQL 查詢正常分配 COUNT 算子場景。 ~~~ obclient>CREATE TABLE t1(c1 INT, c2 INT); Query OK, 0 rows affected (0.12 sec) obclient>INSERT INTO t1 VALUES(1, 1); Query OK, 1 rows affected (0.12 sec) obclient>INSERT INTO t1 VALUES(3, 3); Query OK, 1 rows affected (0.12 sec) obclient>INSERT INTO t1 VALUES(5, 5); Query OK, 1 rows affected (0.12 sec) Q1: obclient>EXPLAIN SELECT c1,ROWNUM FROM t1\G; *************************** 1. row *************************** Query Plan: | ==================================== |ID|OPERATOR |NAME|EST. ROWS|COST| ------------------------------------ |0 |COUNT | |1 |37 | |1 | TABLE SCAN|T1 |1 |36 | ==================================== Outputs & filters: ------------------------------------- 0 - output([T1.C1], [rownum()]), filter(nil) 1 - output([T1.C1]), filter(nil), access([T1.C1]), partitions(p0) obclient>SELECT c1,ROWNUM FROM t1; +------+--------+ | C1 | ROWNUM | +------+--------+ | 1 | 1 | | 3 | 2 | | 5 | 3 | +------+--------+ 3 rows in set (0.01 sec) ~~~ 上述示例中,執行計劃展示中的 outputs & filters 詳細展示了 COUNT 算子的輸出信息如下: <table data-tag="table" id="table-en2-qve-evf" class="table"><colgroup width="194" span="1" data-tag="col" id="col-x9v-nuk-ypv" colwidth="1*" colnum="1" colname="col1" style="width:50%" class="col"></colgroup><colgroup width="557" span="1" data-tag="col" id="col-03f-fwn-u9x" colwidth="1*" colnum="2" colname="col2" style="width:50%" class="col"></colgroup><thead id="thead-6h4-o0j-82u" class="thead"><tr id="tr-bm9-tid-vbn"><th id="td-th0-58d-oo5"><p id="p-j40-lou-cxx"><b>信息名稱</b></p></th><th id="td-2kn-1hi-4ae"><p id="p-1dp-fq9-np7"><b>含義</b></p></th></tr></thead><tbody data-tag="tbody" id="tbody-7z5-u8t-252" class="tbody"><tr data-tag="tr" id="tr-8y8-got-qim" class="tr"><td data-tag="td" id="td-6pf-24f-aru" class="td"><p id="p-8v2-9bk-wxm">output</p></td><td data-tag="td" id="td-e5i-lx4-qqu" class="td"><p id="p-2yv-61p-0xj">該算子輸出的表達式。</p><p id="p-tci-qne-vkx">其中 rownum() 表示 ROWNUM 對應的表達式。</p></td></tr><tr data-tag="tr" id="tr-8uc-28f-o97" class="tr"><td data-tag="td" id="td-4e6-1sk-ai1" class="td"><p id="p-zq2-lz5-a11">filter</p></td><td data-tag="td" id="td-kis-lq1-kdg" class="td"><p data-tag="p" id="p-ojk-qg2-yyk" class="p">該算子上的過濾條件。</p><p data-tag="p" id="p-j21-268-z3o" class="p">由于示例中 COUNT 算子沒有設置 filter,所以為 nil。</p></td></tr></tbody></table> 從上述執行計劃示例的輸出結果可以發現,ROWNUM 對應的表達式的初始值為 1,每通過一次 COUNT 算子,COUNT 算子就會為 ROWNUM 對應的表達式的值加上 1,實現 ROWNUM 表達式的自增操作。 ## 不分配 COUNT 算子的場景 示例 2:含有 rownum 的 SQL 改寫為 LIMIT 后,不分配 COUNT 算子的場景。 ~~~ Q2: obclient>EXPLAIN SELECT 1 FROM DUAL WHERE ROWNUM < 2\G; *************************** 1. row *************************** Query Plan: | ==================================== |ID|OPERATOR |NAME|EST. ROWS|COST| ------------------------------------ |0 |LIMIT | |1 |1 | |1 | EXPRESSION| |1 |1 | ==================================== Outputs & filters: ------------------------------------- 0 - output([1]), filter(nil), limit(?), offset(nil) 1 - output([1]), filter(nil) values({1}) ~~~ 從上述執行計劃示例的輸出結果可以發現,雖然 SQL 中含有 ROWNUM,但是經過 SQL 優化器改寫之后,已經將涉及含有 ROWNUM 的表達式轉換為了等價的 LIMIT 表達式,轉換的好處在于可以做更多的優化,詳細信息請參見[LIMIT](https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.0/LIMIT-1-2)。
                  <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>

                              哎呀哎呀视频在线观看