すべてのプロダクト
Search
ドキュメントセンター

PolarDB:並列クエリの例

最終更新日:Jun 04, 2024

このトピックでは、並列クエリの使用例を示します。 TPCベンチマーク™例では、H (TPC-H) 個のクエリが使用される。

説明

この例では、TPC-Hベンチマークに基づくテストが実装されていますが、TPC-Hベンチマークテストのすべての要件を満たしているわけではありません。 そのため、テスト結果は TPC-H のベンチマークテストの公開結果と一致しない可能性があります。

テストデザイン

  • データ量: テスト用のデータ量は100 GBです。 スケールファクタは100である。

  • MySQL 8.0を実行するPolarDB for MySQLクラスター: ノード仕様は、88 CPUコアと710 GBメモリです。 テストは、クラスターのプライマリノードで実行されます。

GROUP BY および ORDER BY のサポート

たとえば、次のSQL文を実行してクエリを実行します。

SELECT l_returnflag、 
         l_linestatus, 
         Sum(l_quantity)                                       AS sum_qty, 
         Sum(l_extendedprice)                                  AS sum_base_price, 
         Sum(l_extendedprice * (1 - l_discount))               AS sum_disc_price, 
         Sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge, 
         Avg(l_quantity)                                       AS avg_qty, 
         Avg(l_extendedprice)                                  AS avg_price, 
         Avg(l_discount)                                       AS avg_disc, 
         カウント (*) AS count_order
ラインアイテムから
どこl_shipdate <= date '1998-12-01 '-インターバル '93' 日
GROUP BY l_returnflag、 
         l_linestatus
ORDER BY l_returnflag、 
         l_linestatus ; 
  • 並列クエリ機能を有効にする前に、1,563.32が使用されてクエリが実行されます。 Before the parallel query feature is enabled

  • 並列クエリ機能を有効にすると、49.65が使用されてクエリが実行されます。 消費される時間は、元の応答時間の3.18% に短縮されます。 After the parallel query feature is enabled

AGGREGATE機能 (SUM、AVG、およびCOUNT) のサポート

たとえば、クエリには次のSQL文が含まれます。

SELECT l_returnflag、 
         l_linestatus, 
         Sum(l_quantity)                                       AS sum_qty, 
         Sum(l_extendedprice)                                  AS sum_base_price, 
         Sum(l_extendedprice * (1 - l_discount))               AS sum_disc_price, 
         Sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge, 
         Avg(l_quantity)                                       AS avg_qty, 
         Avg(l_extendedprice)                                  AS avg_price, 
         Avg(l_discount)                                       AS avg_disc, 
         カウント (*) AS count_order
ラインアイテムから
どこl_shipdate <= date '1998-12-01 '-インターバル '93' 日
GROUP BY l_returnflag、 
         l_linestatus
ORDER BY l_returnflag、 
         l_linestatus ; 
  • 並列クエリ機能を有効にする前に、1,563.32が使用されてクエリが実行されます。 off

  • 並列クエリ機能を有効にすると、49.65が使用されてクエリが実行されます。 消費される時間は、元の応答時間の3.18% に短縮されます。 on

JOIN のサポート

たとえば、クエリには次のSQL文が含まれます。

select sum(l_extendedprice * (1 - l_discount)) as revenue
lineitem、partから
ここで (p_partkey = l_partkeyおよびp_brand = 'Brand#12 ')
        and p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG') 
        and l_quantity >= 6 and l_quantity <= 6 + 10 
        and p_size between 1 and 5 
        and l_shipmode in ('AIR', 'AIR REG') 
        and l_shipinstruct = 'DELIVER IN PERSON' ) 
    or ( p_partkey = l_partkey and p_brand = 'Brand#13'
        and p_container in ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK') 
        and l_quantity >= 10 and l_quantity <= 10 + 10 
        and p_size between 1 and 10 
        and l_shipmode in ('AIR', 'AIR REG') 
        and l_shipinstruct = 'DELIVER IN PERSON' ) 
    or ( p_partkey = l_partkey and p_brand = 'Brand#24'
        and p_container in ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG') 
        and l_quantity >= 21 and l_quantity <= 21 + 10 
        and p_size between 1 and 15 
        and l_shipmode in ('AIR', 'AIR REG') 
        およびl_shipinstruction='DELIVER IN PERSON' ); 
  • 並列クエリ機能を有効にする前に、21.73が使用されてクエリが実行されます。 off

  • 並列クエリ機能を有効にすると、1.37が使用されてクエリが実行されます。 消費される時間は、元の応答時間の6.30% に短縮されます。 on

BETWEENとIN関数のサポート

たとえば、クエリには次のSQL文が含まれます。

select sum(l_extendedprice * (1 - l_discount)) as revenue
lineitem、partから
ここで (p_partkey = l_partkeyおよびp_brand = 'Brand#12 ')
        and p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG') 
        and l_quantity >= 6 and l_quantity <= 6 + 10 
        and p_size between 1 and 5 
        and l_shipmode in ('AIR', 'AIR REG') 
        and l_shipinstruct = 'DELIVER IN PERSON' ) 
    or ( p_partkey = l_partkey and p_brand = 'Brand#13'
        and p_container in ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK') 
        and l_quantity >= 10 and l_quantity <= 10 + 10 
        and p_size between 1 and 10 
        and l_shipmode in ('AIR', 'AIR REG') 
        and l_shipinstruct = 'DELIVER IN PERSON' ) 
    or ( p_partkey = l_partkey and p_brand = 'Brand#24'
        and p_container in ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG') 
        and l_quantity >= 21 and l_quantity <= 21 + 10 
        and p_size between 1 and 15 
        and l_shipmode in ('AIR', 'AIR REG') 
        およびl_shipinstruction='DELIVER IN PERSON' ); 
  • 並列クエリ機能を有効にする前に、21.73が使用されてクエリが実行されます。 off

  • 並列クエリ機能を有効にすると、1.37が使用されてクエリが実行されます。 消費される時間は、元の応答時間の6.30% に短縮されます。 on

LIMIT のサポート

たとえば、クエリには次のSQL文が含まれます。

l_shipmode、sumを選択します (o_orderpriority = '1-URGENT' またはo_orderpriority = '2-HIGH' の場合、1の場合) 
    else 0
end) as high_line_count, sum (ケースo_orderpriority <> '1-URGENT' およびo_orderpriority <> '2-HIGH' が1の場合
else 0
end) as low_line_count
注文から、lineitem
ここでo_orderkey = l_orderkey
および ('MAIL' 、'TRUCK') のl_shipmode
とl_commitdate < l_receiptdate
とl_shipdate < l_commitdate
およびl_receiptdate >= date '1996-01-01'
l_receiptdate < date '1996-01-01 '+ interval '1' year
l_shipmodeによるグループ
注文によるl_shipmode制限10; 
  • 並列クエリ機能を有効にする前に、339.22が使用されてクエリが実行されます。 off

  • 並列クエリ機能を有効にすると、29.31が使用されてクエリが実行されます。 消費される時間は、元の応答時間の8.64% に短縮されます。 on

INTERVAL機能のサポート

たとえば、クエリには次のSQL文が含まれます。

select 
    100.00 * sum(case when p_type like 'PROMO%' then l_extendedprice * (1 - l_discount) 
    else 0
end) / sum(l_extendedprice * (1 - l_discount)) as promo_revenue
lineitem、partから
ここでl_partkey = p_partkey
およびl_shipdate >= date '1996-01-01'
およびl_shipdate < date '1996-01-01 '+ interval '1' 月制限10; 
  • 並列クエリ機能を有効にする前に、220.87が使用されてクエリが実行されます。 off

  • 並列クエリ機能を有効にすると、7.75が使用されてクエリが実行されます。 消費される時間は、元の応答時間の3.51% に短縮されます。 on

CASE WHEN のサポート

たとえば、クエリには次のSQL文が含まれます。

select 
    100.00 * sum(case when p_type like 'PROMO%' then l_extendedprice * (1 - l_discount) 
    else 0
end) / sum(l_extendedprice * (1 - l_discount)) as promo_revenue
lineitem、partから
ここでl_partkey = p_partkey
およびl_shipdate >= date '1996-01-01'
およびl_shipdate < date '1996-01-01 '+ interval '1' 月制限10; 
  • 並列クエリ機能を有効にする前に、220.87が使用されてクエリが実行されます。 off

  • 並列クエリ機能を有効にすると、7.75が使用されてクエリが実行されます。 消費される時間は、元の応答時間の3.51% に短縮されます。 on

LIKE のサポート

たとえば、クエリには次のSQL文が含まれます。

s_name、s_addressを
 サプライヤー、国どこ
s_suppkeyで 
    ( select ps_suppkey from  partsupp where
             ps_partkey in ( select p_partkey from  part where p_name like 'dark%')
            and ps_availqty>(select 0.0005 * sum(l_quantity) as col1
     from   lineitem,   partsupp
     where l_partkey = ps_partkey and l_suppkey = ps_suppkey
     and l_shipdate >= date '1993-01-01' and l_shipdate < date '1993-01-01' + interval '1' year)
    )
s_nationkey = n_nationkeyおよびn_name = 'JORDAN'
注文によるs_name limit 10; 
  • 並列クエリ機能を有効にする前に、427.46が使用されてクエリが実行されます。 1

  • 並列クエリ機能を有効にすると、33.72が使用されてクエリが実行されます。 消費される時間は、元の応答時間の7.89% に短縮されます。 2

サブクエリのサポート

たとえば、クエリには次のSQL文が含まれます。

select
    s_acctbal,
    s_name、
    n_name、
    p_partkey,
    p_mfgr,
    s_address,
    s_phone,
    s_comment
から
    部分,
    サプライヤー,
    partsupp,
    国家、
    リージョン
ここで
    p_partkey = ps_partkey
    およびs_suppkey = ps_suppkey
    およびp_size = 35
    と「 % STEEL」のようなp_type
    およびs_nationkey = n_nationkey
    とn_regionkey = r_regionkey
    およびr_name = 'AMERICA'
    およびps_supplycost = (
        選択
            min(ps_supplycost)
        から
            partsupp,
            サプライヤー,
            国家、
            region
        where
            p_partkey = ps_partkey
            およびs_suppkey = ps_suppkey
            およびs_nationkey = n_nationkey
            とn_regionkey = r_regionkey
            およびr_name = 'AMERICA'
    )
による注文
    s_acctbal desc、
    n_name、
    s_name、
    p_partkey;
制限1; 
  • 並列クエリ機能を有効にする前に、9.27が使用されてクエリが実行されます。 Support for subqueries (before the parallel query feature is enabled)

  • 並列クエリ機能を有効にすると、1.12が使用されてクエリが実行されます。 消費される時間は、元の応答時間の12% に短縮されます。 Support for subqueries (after the parallel query feature is enabled)

ROLLUPとのグループのためのサポート

GROUP BY WITH ROLLUPの詳細については、「MySQL WITH ROLLUP」および「MySQL ROLLUP」をご参照ください。

たとえば、クエリには次のSQL文が含まれます。

select
    l_returnflag、
    l_linestatus,
    sum(l_quantity) as sum_qty,
    sum(l_extendedprice) as sum_base_price,
    sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
    sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
    avg(l_quantity) をavg_qtyとして、
    avg(l_extendedprice) as avg_price,
    avg(l_discount) as avg_disc,
    count(*) as count_order
から
    lineitem
ここで
    l_shipdate <= date_sub('1998-12-01 '、間隔':1' 日)
グループによって
    l_returnflag、
    l_linestatus
ロールアップ付き
による注文
    l_returnflag、
    l_linestatus; 
  • 並列クエリ機能を有効にする前に、318.73が使用されてクエリが実行されます。 GROUP BY WITH ROLLUP (before the parallel query feature is enabled)

  • 並列クエリ機能を有効にすると、22.30が使用されてクエリが実行されます。 消費される時間は、元の応答時間の7.00% に短縮されます。 GROUP BY WITH ROLLUP function (after the parallel query feature is enabled)

INSERTのサポート... SELECTとREPLACE... SELECT

たとえば、クエリには次のSQL文が含まれます。

line_item_apに挿入
SELECT l_returnflag、 
         l_linestatus, 
         Sum(l_quantity)                                       AS sum_qty, 
         Sum(l_extendedprice)                                  AS sum_base_price, 
         Sum(l_extendedprice * (1 - l_discount))               AS sum_disc_price, 
         Sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge, 
         Avg(l_quantity)                                       AS avg_qty, 
         Avg(l_extendedprice)                                  AS avg_price, 
         Avg(l_discount)                                       AS avg_disc, 
         カウント (*) AS count_order
ラインアイテムから
どこl_shipdate <= date '1998-12-01 '-インターバル '93' 日
GROUP BY l_returnflag、 
         l_linestatus
ORDER BY l_returnflag、 
         l_linestatus ; 
  • 並列クエリ機能を有効にする前に、182.82が使用されてクエリが実行されます。 INSERT ... SELECT/REPLACE ... SELECT (before the parallel query feature is enabled)

  • 並列クエリ機能を有効にすると、23.25が使用されてクエリが実行されます。 消費される時間は、元の応答時間の12.72% に短縮されます。 INSERT ... SELECT/REPLACE ... SELECT (after the parallel query feature is enabled)