このトピックでは、並列クエリの使用例を示します。 TPCベンチマーク™例では、H (TPC-H) 個のクエリが使用される。
この例では、TPC-Hベンチマークに基づくテストが実装されていますが、TPC-Hベンチマークテストのすべての要件を満たしているわけではありません。 そのため、テスト結果は TPC-H のベンチマークテストの公開結果と一致しない可能性があります。
BETWEENおよびIN機能のサポート
INTERVAL関数のサポート
テストデザイン
データ量: テスト用のデータ量は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が使用されてクエリが実行されます。

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

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が使用されてクエリが実行されます。

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

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が使用されてクエリが実行されます。

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

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が使用されてクエリが実行されます。

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

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が使用されてクエリが実行されます。

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

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が使用されてクエリが実行されます。

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

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が使用されてクエリが実行されます。

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

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が使用されてクエリが実行されます。

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

サブクエリのサポート
たとえば、クエリには次の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が使用されてクエリが実行されます。

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

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が使用されてクエリが実行されます。

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

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が使用されてクエリが実行されます。

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