<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] # 分布式執行計劃管理 分布式執行計劃可以使用 HINT 管理,以提高 SQL 查詢性能。 分布式執行框架支持的 HINT 包括 ORDERED、LEADING、USE\_NL、USE\_HASH 和 USE\_MERGE 等。 ## NO\_USE\_PX 如果某個 query 確定不希望走并行執行框架,使用 NO\_USE\_PX 拉回數據并生成本地執行計劃。 ## PARALLEL 指定分布式執行的并行度。啟用 3 個 worker 并行執行掃描,如下例所示: ~~~ obclient>SELECT /*+ PARALLEL(3) */ MAX(L_QUANTITY) FROM table_name; ~~~ **注意** 在復雜查詢中,調度器可以調度 2 個 DFO 并行流水執行,此時,啟用的 worker 數量為并行度的2倍,即 PARALLEL \* 2。 ## ORDERED ORDERED HINT 指定并行查詢計劃中 JOIN 的順序,嚴格按照 FROM 語句中的順序生成。 如下例所示,強制要求 CUSTOMER 為左表,ORDERS 為右表,并且使用 NESTED LOOP JOIN: ~~~ obclient>CREATE TABLE lineitem( l_orderkey NUMBER(20) NOT NULL , l_linenumber NUMBER(20) NOT NULL , l_quantity NUMBER(20) NOT NULL , l_extendedprice DECIMAL(10,2) NOT NULL , l_discount DECIMAL(10,2) NOT NULL , l_tax DECIMAL(10,2) NOT NULL , l_shipdate DATE NOT NULL, PRIMARY KEY(L_ORDERKEY, L_LINENUMBER)); Query OK, 1 row affected (0.00 sec) obclient>CREATE TABLE customer( c_custkey NUMBER(20) NOT NULL , c_name VARCHAR(25) DEFAULT NULL, c_address VARCHAR(40) DEFAULT NULL, c_nationkey NUMBER(20) DEFAULT NULL, c_phone CHAR(15) DEFAULT NULL, c_acctbal DECIMAL(10,2) DEFAULT NULL, c_mktsegment CHAR(10) DEFAULT NULL, c_comment VARCHAR(117) DEFAULT NULL, PRIMARY KEY(c_custkey)); Query OK, 1 row affected (0.00 sec) obclient>CREATE TABLE orders( o_orderkey NUMBER(20) NOT NULL , o_custkey NUMBER(20) NOT NULL , o_orderstatus CHAR(1) DEFAULT NULL, o_totalprice DECIMAL(10,2) DEFAULT NULL, o_orderdate DATE NOT NULL, o_orderpriority CHAR(15) DEFAULT NULL, o_clerk CHAR(15) DEFAULT NULL, o_shippriority NUMBER(20) DEFAULT NULL, o_comment VARCHAR(79) DEFAULT NULL, PRIMARY KEY(o_orderkey,o_orderdate,o_custkey)); Query OK, 1 row affected (0.00 sec) obclient> INSERT INTO lineitem VALUES(1,2,3,6.00,0.20,0.01,'01-JUN-02'); Query OK, 1 row affected (0.01 sec) obclient> INSERT INTO customer VALUES(1,'Leo',null,null,'13700461258',null,'BUILDING',null); Query OK, 1 row affected (0.01 sec) obclient> INSERT INTO orders VALUES(1,1,null,null,'01-JUN-20',10,null,8,null); Query OK, 1 row affected (0.00 sec) obclient>SELECT /*+ ORDERED USE_NL(orders) */o_orderdate, o_shippriority FROM customer, orders WHERE c_mktsegment = 'BUILDING' AND c_custkey = o_custkey GROUP BY o_orderdate, o_shippriority; +-------------+----------------+ | O_ORDERDATE | O_SHIPPRIORITY | +-------------+----------------+ | 01-JUN-20 | 8 | +-------------+----------------+ 1 row in set (0.01 sec) ~~~ 在手寫 SQL 時,ORDERED 較為有用,用戶知道 JOIN 的最佳順序時,可以將表按照順序寫在 FROM 的后面,然后加上 ORDERED HINT。 ## LEADING LEADING HINT 指定并行查詢計劃中最先 JOIN 哪些表,LEADING 中的表從左到右的順序,也是 JOIN 的順序。它比 ORDERED 有更大的靈活性。 **注意** 如果 ORDERED 和 LEADING 同時使用,僅 ORDERED 生效。 ## PQ\_DISTRIBUTE PQ HINT 即`PQ_DISTRIBUTE`,用于指定并行查詢計劃中的數據分布方式。PQ HINT 會改變分布式 JOIN 時的數據分發方式。 PQ HINT 的基本語法如下: ~~~ PQ_DISTRIBUTE(tablespec outer_distribution inner_distribution) ~~~ 參數解釋如下: * tablespec 指定關注的表,關注 JOIN 的右表。 * outer\_distribution 指定左表的數據分發方式。 * inner\_distribution 指定右表的數據分發方式。 兩表的數據分發方式共有以下六種: * HASH, HASH * BROADCAST, NONE * NONE, BROADCAST * PARTITION, NONE * NONE, PARTITION * NONE, NONE 其中,帶分區的兩種分發方式要求左表或右表有分區,而且分區鍵就是 JOIN 的鍵。如果不滿足要求的話,PQ HINT 不會生效。 ~~~ obclient>CREATE TABLE t1(c1 INT PRIMARY KEY, c2 INT, c3 INT, c4 DATE); Query OK, 0 rows affected (0.09 sec) obclient>CREATE INDEX i1 ON t1(c3); Query OK, 0 rows affected (0.09 sec) obclient>CREATE TABLE t2(c1 INT(11) NOT NULL, c2 INT(11) NOT NULL, c3 INT(11) NOT NULL, PRIMARY KEY (c1, c2, c3)) PARTITION BY KEY(c2) PARTITIONS 4; Query OK, 0 rows affected (0.09 sec) obclient>EXPLAIN BASIC SELECT /*+USE_PX PARALLEL(3) PQ_DISTRIBUTE (t2 BROADCAST NONE) LEADING(t1 t2)*/ * FROM t1 JOIN t2 ON t1.c2 = t2.c2\G; *************************** 1. row *************************** Query Plan: ================================================ |ID|OPERATOR |NAME | ------------------------------------------------ |0 |EXCHANGE IN DISTR | | |1 | EXCHANGE OUT DISTR |:EX10001| |2 | HASH JOIN | | |3 | EXCHANGE IN DISTR | | |4 | EXCHANGE OUT DISTR (BROADCAST)|:EX10000| |5 | PX BLOCK ITERATOR | | |6 | TABLE SCAN |t1 | |7 | PX BLOCK ITERATOR | | |8 | TABLE SCAN |t2 | ================================================ ~~~ ## USE\_NL USE\_NL HINT 指定 JOIN 使用 NESTED LOOP JOIN,并且需要滿足 USE\_NL 中指定的表是 JOIN 的右表。 如下例所示,如果希望 join1 為 NESTED LOOP JOIN,則 HINT 寫法為`LEADING(a, (b,c)) USE_NL((b,c))`。 當 USE\_NLJ 和 ORDERED、LEADING HINT 一起使用時,如果 USE\_NLJ 中注明的表不是右表,則 USE\_NLJ HINT 會被忽略。 ![](https://img.kancloud.cn/a6/de/a6de332ea9bda104c97450661e2ed0ee_328x265.png) ## USE\_HASH USE\_HASH HINT 指定 JOIN 使用 HASH JOIN,并且需要滿足 USE\_HASH 中指定的表是 JOIN 的右表。 **注意** 如果沒有使用 ORDERED 和 LEADING HINT,并且優化器生成的 JOIN 順序中指定的表之間不是直接 JOIN 的關系,那么 USE\_HASH HINT 會被忽略。 ## USE\_MERGE USE\_MERGE HINT 指定 JOIN 使用 MERGE JOIN,并且需要滿足 USE\_MERGE 中指定的表是 JOIN 的右表。 **注意** 如果沒有使用 ORDERED 和 LEADING HINT,并且優化器生成的 JOIN 順序中指定的表之間不是直接 JOIN 的關系,那么 USE\_MERGE HINT 會被忽略。
                  <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>

                              哎呀哎呀视频在线观看