Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/MariaDB/mysql-test/main/   (MariaDB Server Version 8.1-8.4©)  Datei vom 1.9.2026 mit Größe 123 kB image not shown  

Impressum update_single_to_multi.result   Sprache: Lisp

 

DROP DATABASE IF EXISTS dbt3_s001;
CREATE DATABASE dbt3_s001 CHARACTER SET latin1;
use dbt3_s001;
create index i_n_name on nation(n_name);
analyze table
nation, lineitem, customer, orders, part, supplier, partsupp, region
persistent for all;
Table Op Msg_type Msg_text
dbt3_s001.nation analyze status Engine-independent statistics collected
dbt3_s001.nation analyze status OK
dbt3_s001.lineitem analyze status Engine-independent statistics collected
dbt3_s001.lineitem analyze status OK
dbt3_s001.customer analyze status Engine-independent statistics collected
dbt3_s001.customer analyze status OK
dbt3_s001.orders analyze status Engine-independent statistics collected
dbt3_s001.orders analyze status OK
dbt3_s001.part analyze status Engine-independent statistics collected
dbt3_s001.part analyze status OK
dbt3_s001.supplier analyze status Engine-independent statistics collected
dbt3_s001.supplier analyze status OK
dbt3_s001.partsupp analyze status Engine-independent statistics collected
dbt3_s001.partsupp analyze status OK
dbt3_s001.region analyze status Engine-independent statistics collected
dbt3_s001.region analyze status OK
# Pullout
# =======
explain
select o_orderkey, o_totalprice from orders where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (select n_nationkey from nation
where n_name='PERU'));
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY nation ref PRIMARY,i_n_name i_n_name 26 const 1 Using index condition
1 PRIMARY customer ref PRIMARY,i_c_nationkey i_c_nationkey 5 dbt3_s001.nation.n_nationkey 6 
1 PRIMARY orders ref|filter i_o_orderdate,i_o_custkey i_o_custkey|i_o_orderdate 5|4 dbt3_s001.customer.c_custkey 15 (7%) Using where; Using rowid filter
explain format=json
select o_orderkey, o_totalprice from orders where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (select n_nationkey from nation
where n_name='PERU'));
EXPLAIN
{
  "query_block": {
    "select_id": 1,
    "cost": 0.052271677,
    "nested_loop": [
      {
        "table": {
          "table_name": "nation",
          "access_type": "ref",
          "possible_keys": ["PRIMARY", "i_n_name"],
          "key": "i_n_name",
          "key_length": "26",
          "used_key_parts": ["n_name"],
          "ref": ["const"],
          "loops": 1,
          "rows": 1,
          "cost": 0.002024411,
          "filtered": 100,
          "index_condition": "nation.n_name = 'PERU'"
        }
      },
      {
        "table": {
          "table_name": "customer",
          "access_type": "ref",
          "possible_keys": ["PRIMARY", "i_c_nationkey"],
          "key": "i_c_nationkey",
          "key_length": "5",
          "used_key_parts": ["c_nationkey"],
          "ref": ["dbt3_s001.nation.n_nationkey"],
          "loops": 1,
          "rows": 6,
          "cost": 0.008193756,
          "filtered": 100
        }
      },
      {
        "table": {
          "table_name": "orders",
          "access_type": "ref",
          "possible_keys": ["i_o_orderdate", "i_o_custkey"],
          "key": "i_o_custkey",
          "key_length": "5",
          "used_key_parts": ["o_custkey"],
          "ref": ["dbt3_s001.customer.c_custkey"],
          "rowid_filter": {
            "range": {
              "key": "i_o_orderdate",
              "used_key_parts": ["o_orderDATE"]
            },
            "rows": 108,
            "selectivity_pct": 7.2
          },
          "loops": 6,
          "rows": 15,
          "cost": 0.04205351,
          "filtered": 7.199999809,
          "attached_condition": "orders.o_orderDATE between '1992-01-01' and '1992-06-30'"
        }
      }
    ]
  }
}
select o_orderkey, o_totalprice from orders where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (select n_nationkey from nation
where n_name='PERU'));
o_orderkey o_totalprice
644 201268.06
2880 145761.99
3142 16030.15
5382 138423.03
5095 184583.99
737 12984.85
1729 12137.76
5121 150334.57
explain
update orders set o_totalprice = o_totalprice-50 where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (select n_nationkey from nation
where n_name='PERU'));
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY nation ref PRIMARY,i_n_name i_n_name 26 const 1 Using index condition
1 PRIMARY customer ref PRIMARY,i_c_nationkey i_c_nationkey 5 dbt3_s001.nation.n_nationkey 6 
1 PRIMARY orders ref|filter i_o_orderdate,i_o_custkey i_o_custkey|i_o_orderdate 5|4 dbt3_s001.customer.c_custkey 15 (7%) Using where; Using rowid filter
explain format=json
update orders set o_totalprice = o_totalprice-50 where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (select n_nationkey from nation
where n_name='PERU'));
EXPLAIN
{
  "query_block": {
    "select_id": 1,
    "cost": "COST_REPLACED",
    "nested_loop": [
      {
        "table": {
          "table_name": "nation",
          "access_type": "ref",
          "possible_keys": ["PRIMARY", "i_n_name"],
          "key": "i_n_name",
          "key_length": "26",
          "used_key_parts": ["n_name"],
          "ref": ["const"],
          "loops": 1,
          "rows": 1,
          "cost": "COST_REPLACED",
          "filtered": 100,
          "index_condition": "nation.n_name = 'PERU'"
        }
      },
      {
        "table": {
          "table_name": "customer",
          "access_type": "ref",
          "possible_keys": ["PRIMARY", "i_c_nationkey"],
          "key": "i_c_nationkey",
          "key_length": "5",
          "used_key_parts": ["c_nationkey"],
          "ref": ["dbt3_s001.nation.n_nationkey"],
          "loops": 1,
          "rows": 6,
          "cost": "COST_REPLACED",
          "filtered": 100
        }
      },
      {
        "table": {
          "table_name": "orders",
          "access_type": "ref",
          "possible_keys": ["i_o_orderdate", "i_o_custkey"],
          "key": "i_o_custkey",
          "key_length": "5",
          "used_key_parts": ["o_custkey"],
          "ref": ["dbt3_s001.customer.c_custkey"],
          "rowid_filter": {
            "range": {
              "key": "i_o_orderdate",
              "used_key_parts": ["o_orderDATE"]
            },
            "rows": 108,
            "selectivity_pct": 7.2
          },
          "loops": 6,
          "rows": 15,
          "cost": "COST_REPLACED",
          "filtered": 7.199999809,
          "attached_condition": "orders.o_orderDATE between '1992-01-01' and '1992-06-30'"
        }
      }
    ]
  }
}
update orders set o_totalprice = o_totalprice-50 where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (select n_nationkey from nation
where n_name='PERU'));
select o_orderkey, o_totalprice from orders where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (select n_nationkey from nation
where n_name='PERU'));
o_orderkey o_totalprice
644 201218.06
2880 145711.99
3142 15980.15
5382 138373.03
5095 184533.99
737 12934.85
1729 12087.76
5121 150284.57
update orders set o_totalprice= o_totalprice+50 where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (select n_nationkey from nation
where n_name='PERU'));
select o_orderkey, o_totalprice from orders where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (select n_nationkey from nation
where n_name='PERU'));
o_orderkey o_totalprice
644 201268.06
2880 145761.99
3142 16030.15
5382 138423.03
5095 184583.99
737 12984.85
1729 12137.76
5121 150334.57
explain
select ps_partkey, ps_suppkey, ps_supplycost from partsupp where (ps_partkey, ps_suppkey) in
(select p_partkey, s_suppkey from part, supplier
where p_retailprice between 901 and 910 and
s_nationkey in (select n_nationkey from nation
where n_name='PERU'));
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY nation ref PRIMARY,i_n_name i_n_name 26 const 1 Using index condition
1 PRIMARY supplier ref PRIMARY,i_s_nationkey i_s_nationkey 5 dbt3_s001.nation.n_nationkey 1 
1 PRIMARY part ALL PRIMARY NULL NULL NULL 200 Using where; Using join buffer (flat, BNL join)
1 PRIMARY partsupp eq_ref PRIMARY,i_ps_partkey,i_ps_suppkey PRIMARY 8 dbt3_s001.part.p_partkey,dbt3_s001.supplier.s_suppkey 1 
select ps_partkey, ps_suppkey, ps_supplycost from partsupp where (ps_partkey, ps_suppkey) in
(select p_partkey, s_suppkey from part, supplier
where p_retailprice between 901 and 910 and
s_nationkey in (select n_nationkey from nation
where n_name='PERU'));
ps_partkey ps_suppkey ps_supplycost
1 8 357.84
3 8 645.4
4 1 444.37
5 8 50.52
6 1 642.13
7 8 763.98
8 1 957.34
explain
update partsupp set ps_supplycost = ps_supplycost+2 where (ps_partkey, ps_suppkey) in
(select p_partkey, s_suppkey from part, supplier
where p_retailprice between 901 and 910 and
s_nationkey in (select n_nationkey from nation
where n_name='PERU'));
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY nation ref PRIMARY,i_n_name i_n_name 26 const 1 Using index condition
1 PRIMARY supplier ref PRIMARY,i_s_nationkey i_s_nationkey 5 dbt3_s001.nation.n_nationkey 1 
1 PRIMARY part ALL PRIMARY NULL NULL NULL 200 Using where
1 PRIMARY partsupp eq_ref PRIMARY,i_ps_partkey,i_ps_suppkey PRIMARY 8 dbt3_s001.part.p_partkey,dbt3_s001.supplier.s_suppkey 1 
update partsupp set ps_supplycost = ps_supplycost+2 where (ps_partkey, ps_suppkey) in
(select p_partkey, s_suppkey from part, supplier
where p_retailprice between 901 and 910 and
s_nationkey in (select n_nationkey from nation
where n_name='PERU'));
select ps_partkey, ps_suppkey, ps_supplycost from partsupp where (ps_partkey, ps_suppkey) in
(select p_partkey, s_suppkey from part, supplier
where p_retailprice between 901 and 910 and
s_nationkey in (select n_nationkey from nation
where n_name='PERU'));
ps_partkey ps_suppkey ps_supplycost
1 8 359.84
3 8 647.4
4 1 446.37
5 8 52.52
6 1 644.13
7 8 765.98
8 1 959.34
update partsupp set ps_supplycost = ps_supplycost-2 where (ps_partkey, ps_suppkey) in
(select p_partkey, s_suppkey from part, supplier
where p_retailprice between 901 and 910 and
s_nationkey in (select n_nationkey from nation
where n_name='PERU'));
select ps_partkey, ps_suppkey, ps_supplycost from partsupp where (ps_partkey, ps_suppkey) in
(select p_partkey, s_suppkey from part, supplier
where p_retailprice between 901 and 910 and
s_nationkey in (select n_nationkey from nation
where n_name='PERU'));
ps_partkey ps_suppkey ps_supplycost
1 8 357.84
3 8 645.4
4 1 444.37
5 8 50.52
6 1 642.13
7 8 763.98
8 1 957.34
explain
select ps_partkey, ps_suppkey, ps_supplycost from partsupp where ps_partkey in (select p_partkey from part
where p_retailprice between 901 and 910) and
ps_suppkey in (select s_suppkey from supplier
where s_nationkey in (select n_nationkey from nation
where n_name='PERU'));
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY nation ref PRIMARY,i_n_name i_n_name 26 const 1 Using index condition
1 PRIMARY supplier ref PRIMARY,i_s_nationkey i_s_nationkey 5 dbt3_s001.nation.n_nationkey 1 
1 PRIMARY part ALL PRIMARY NULL NULL NULL 200 Using where; Using join buffer (flat, BNL join)
1 PRIMARY partsupp eq_ref PRIMARY,i_ps_partkey,i_ps_suppkey PRIMARY 8 dbt3_s001.part.p_partkey,dbt3_s001.supplier.s_suppkey 1 
select ps_partkey, ps_suppkey, ps_supplycost from partsupp where ps_partkey in (select p_partkey from part
where p_retailprice between 901 and 910) and
ps_suppkey in (select s_suppkey from supplier
where s_nationkey in (select n_nationkey from nation
where n_name='PERU'));
ps_partkey ps_suppkey ps_supplycost
1 8 357.84
3 8 645.4
4 1 444.37
5 8 50.52
6 1 642.13
7 8 763.98
8 1 957.34
explain
update partsupp set ps_supplycost = ps_supplycost+10 where ps_partkey in (select p_partkey from part
where p_retailprice between 901 and 910) and
ps_suppkey in (select s_suppkey from supplier
where s_nationkey in (select n_nationkey from nation
where n_name='PERU'));
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY nation ref PRIMARY,i_n_name i_n_name 26 const 1 Using index condition
1 PRIMARY supplier ref PRIMARY,i_s_nationkey i_s_nationkey 5 dbt3_s001.nation.n_nationkey 1 
1 PRIMARY part ALL PRIMARY NULL NULL NULL 200 Using where
1 PRIMARY partsupp eq_ref PRIMARY,i_ps_partkey,i_ps_suppkey PRIMARY 8 dbt3_s001.part.p_partkey,dbt3_s001.supplier.s_suppkey 1 
update partsupp set ps_supplycost = ps_supplycost+10 where ps_partkey in (select p_partkey from part
where p_retailprice between 901 and 910) and
ps_suppkey in (select s_suppkey from supplier
where s_nationkey in (select n_nationkey from nation
where n_name='PERU'));
select ps_partkey, ps_suppkey, ps_supplycost from partsupp where ps_partkey in (select p_partkey from part
where p_retailprice between 901 and 910) and
ps_suppkey in (select s_suppkey from supplier
where s_nationkey in (select n_nationkey from nation
where n_name='PERU'));
ps_partkey ps_suppkey ps_supplycost
1 8 367.84
3 8 655.4
4 1 454.37
5 8 60.52
6 1 652.13
7 8 773.98
8 1 967.34
update partsupp set ps_supplycost = ps_supplycost-10 where ps_partkey in (select p_partkey from part
where p_retailprice between 901 and 910) and
ps_suppkey in (select s_suppkey from supplier
where s_nationkey in (select n_nationkey from nation
where n_name='PERU'));
select ps_partkey, ps_suppkey, ps_supplycost from partsupp where ps_partkey in (select p_partkey from part
where p_retailprice between 901 and 910) and
ps_suppkey in (select s_suppkey from supplier
where s_nationkey in (select n_nationkey from nation
where n_name='PERU'));
ps_partkey ps_suppkey ps_supplycost
1 8 357.84
3 8 645.4
4 1 444.37
5 8 50.52
6 1 642.13
7 8 763.98
8 1 957.34
explain
select l_orderkey, l_linenumber, l_tax from lineitem where l_orderkey in (select o_orderkey from orders
where o_custkey in
(select c_custkey from customer
where c_nationkey in
(select n_nationkey from nation
where n_name='PERU'))
and
o_orderDATE between '1992-06-30' and '1992-12-31')
and
(l_partkey, l_suppkey) in
(select p_partkey, s_suppkey from part, supplier
where p_retailprice between 901 and 1000 and
s_nationkey in (select n_nationkey from nation
where n_name='PERU'));
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY nation ref PRIMARY,i_n_name i_n_name 26 const 1 Using index condition
1 PRIMARY nation ref PRIMARY,i_n_name i_n_name 26 const 1 Using index condition
1 PRIMARY supplier ref PRIMARY,i_s_nationkey i_s_nationkey 5 dbt3_s001.nation.n_nationkey 1 
1 PRIMARY customer ref PRIMARY,i_c_nationkey i_c_nationkey 5 dbt3_s001.nation.n_nationkey 6 
1 PRIMARY orders ref|filter PRIMARY,i_o_orderdate,i_o_custkey i_o_custkey|i_o_orderdate 5|4 dbt3_s001.customer.c_custkey 15 (7%) Using where; Using rowid filter
1 PRIMARY lineitem ref PRIMARY,i_l_suppkey_partkey,i_l_partkey,i_l_suppkey,i_l_orderkey,i_l_orderkey_quantity PRIMARY 4 dbt3_s001.orders.o_orderkey 4 Using where
1 PRIMARY part eq_ref PRIMARY PRIMARY 4 dbt3_s001.lineitem.l_partkey 1 Using where
select l_orderkey, l_linenumber, l_tax from lineitem where l_orderkey in (select o_orderkey from orders
where o_custkey in
(select c_custkey from customer
where c_nationkey in
(select n_nationkey from nation
where n_name='PERU'))
and
o_orderDATE between '1992-06-30' and '1992-12-31')
and
(l_partkey, l_suppkey) in
(select p_partkey, s_suppkey from part, supplier
where p_retailprice between 901 and 1000 and
s_nationkey in (select n_nationkey from nation
where n_name='PERU'));
l_orderkey l_linenumber l_tax
4996 1 0.01
933 1 0.04
2500 2 0.02
2500 4 0.02
explain
update lineitem set l_tax = (l_tax*100+1)/100 where l_orderkey in (select o_orderkey from orders
where o_custkey in
(select c_custkey from customer
where c_nationkey in
(select n_nationkey from nation
where n_name='PERU'))
and
o_orderDATE between '1992-06-30' and '1992-12-31')
and
(l_partkey, l_suppkey) in
(select p_partkey, s_suppkey from part, supplier
where p_retailprice between 901 and 1000 and
s_nationkey in (select n_nationkey from nation
where n_name='PERU'));
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY nation ref PRIMARY,i_n_name i_n_name 26 const 1 Using index condition
1 PRIMARY nation ref PRIMARY,i_n_name i_n_name 26 const 1 Using index condition
1 PRIMARY supplier ref PRIMARY,i_s_nationkey i_s_nationkey 5 dbt3_s001.nation.n_nationkey 1 
1 PRIMARY customer ref PRIMARY,i_c_nationkey i_c_nationkey 5 dbt3_s001.nation.n_nationkey 6 
1 PRIMARY orders ref|filter PRIMARY,i_o_orderdate,i_o_custkey i_o_custkey|i_o_orderdate 5|4 dbt3_s001.customer.c_custkey 15 (7%) Using where; Using rowid filter
1 PRIMARY lineitem ref PRIMARY,i_l_suppkey_partkey,i_l_partkey,i_l_suppkey,i_l_orderkey,i_l_orderkey_quantity PRIMARY 4 dbt3_s001.orders.o_orderkey 4 Using where
1 PRIMARY part eq_ref PRIMARY PRIMARY 4 dbt3_s001.lineitem.l_partkey 1 Using where
update lineitem set l_tax = (l_tax*100+1)/100 where l_orderkey in (select o_orderkey from orders
where o_custkey in
(select c_custkey from customer
where c_nationkey in
(select n_nationkey from nation
where n_name='PERU'))
and
o_orderDATE between '1992-06-30' and '1992-12-31')
and
(l_partkey, l_suppkey) in
(select p_partkey, s_suppkey from part, supplier
where p_retailprice between 901 and 1000 and
s_nationkey in (select n_nationkey from nation
where n_name='PERU'));
select l_orderkey, l_linenumber, l_tax from lineitem where l_orderkey in (select o_orderkey from orders
where o_custkey in
(select c_custkey from customer
where c_nationkey in
(select n_nationkey from nation
where n_name='PERU'))
and
o_orderDATE between '1992-06-30' and '1992-12-31')
and
(l_partkey, l_suppkey) in
(select p_partkey, s_suppkey from part, supplier
where p_retailprice between 901 and 1000 and
s_nationkey in (select n_nationkey from nation
where n_name='PERU'));
l_orderkey l_linenumber l_tax
4996 1 0.02
933 1 0.05
2500 2 0.03
2500 4 0.03
update lineitem set l_tax = (l_tax*100-1)/100 where l_orderkey in (select o_orderkey from orders
where o_custkey in
(select c_custkey from customer
where c_nationkey in
(select n_nationkey from nation
where n_name='PERU'))
and
o_orderDATE between '1992-06-30' and '1992-12-31')
and
(l_partkey, l_suppkey) in
(select p_partkey, s_suppkey from part, supplier
where p_retailprice between 901 and 1000 and
s_nationkey in (select n_nationkey from nation
where n_name='PERU'));
select l_orderkey, l_linenumber, l_tax from lineitem where l_orderkey in (select o_orderkey from orders
where o_custkey in
(select c_custkey from customer
where c_nationkey in
(select n_nationkey from nation
where n_name='PERU'))
and
o_orderDATE between '1992-06-30' and '1992-12-31')
and
(l_partkey, l_suppkey) in
(select p_partkey, s_suppkey from part, supplier
where p_retailprice between 901 and 1000 and
s_nationkey in (select n_nationkey from nation
where n_name='PERU'));
l_orderkey l_linenumber l_tax
4996 1 0.01
933 1 0.04
2500 2 0.02
2500 4 0.02
# FirstMatch
# ==========
set optimizer_switch='materialization=off';
explain
select c_name, c_acctbal from customer where c_nationkey in (select n_nationkey from nation
where n_regionkey in (1,2))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-10-09' and '1993-06-08');
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY nation ALL PRIMARY,i_n_regionkey NULL NULL NULL 25 Using where
1 PRIMARY customer ref PRIMARY,i_c_nationkey i_c_nationkey 5 dbt3_s001.nation.n_nationkey 6 
1 PRIMARY orders ref|filter i_o_orderdate,i_o_custkey i_o_custkey|i_o_orderdate 5|4 dbt3_s001.customer.c_custkey 15 (9%) Using where; FirstMatch(customer); Using rowid filter
explain format=json
select c_name, c_acctbal from customer where c_nationkey in (select n_nationkey from nation
where n_regionkey in (1,2))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-10-09' and '1993-06-08');
EXPLAIN
{
  "query_block": {
    "select_id": 1,
    "cost": "COST_REPLACED",
    "nested_loop": [
      {
        "table": {
          "table_name": "nation",
          "access_type": "ALL",
          "possible_keys": ["PRIMARY", "i_n_regionkey"],
          "loops": 1,
          "rows": 25,
          "cost": "COST_REPLACED",
          "filtered": 40,
          "attached_condition": "nation.n_regionkey in (1,2)"
        }
      },
      {
        "table": {
          "table_name": "customer",
          "access_type": "ref",
          "possible_keys": ["PRIMARY", "i_c_nationkey"],
          "key": "i_c_nationkey",
          "key_length": "5",
          "used_key_parts": ["c_nationkey"],
          "ref": ["dbt3_s001.nation.n_nationkey"],
          "loops": 10,
          "rows": 6,
          "cost": "COST_REPLACED",
          "filtered": 100
        }
      },
      {
        "table": {
          "table_name": "orders",
          "access_type": "ref",
          "possible_keys": ["i_o_orderdate", "i_o_custkey"],
          "key": "i_o_custkey",
          "key_length": "5",
          "used_key_parts": ["o_custkey"],
          "ref": ["dbt3_s001.customer.c_custkey"],
          "rowid_filter": {
            "range": {
              "key": "i_o_orderdate",
              "used_key_parts": ["o_orderDATE"]
            },
            "rows": 140,
            "selectivity_pct": 9.333333333
          },
          "loops": 60,
          "rows": 15,
          "cost": "COST_REPLACED",
          "filtered": 6.666666508,
          "attached_condition": "orders.o_orderDATE between '1992-10-09' and '1993-06-08'",
          "first_match": "customer"
        }
      }
    ]
  }
}
select c_name, c_acctbal from customer where c_nationkey in (select n_nationkey from nation
where n_regionkey in (1,2))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-10-09' and '1993-06-08');
c_name c_acctbal
Customer#000000059 3458.6
Customer#000000106 3288.42
Customer#000000017 6.34
Customer#000000047 274.58
Customer#000000092 1182.91
Customer#000000101 7470.96
Customer#000000022 591.98
Customer#000000040 1335.3
Customer#000000064 -646.64
Customer#000000122 7865.46
Customer#000000028 1007.18
Customer#000000037 -917.75
Customer#000000091 4643.14
Customer#000000115 7508.92
Customer#000000067 8166.59
Customer#000000094 5500.11
Customer#000000103 2757.45
Customer#000000130 5073.58
Customer#000000139 7897.78
Customer#000000142 2209.81
Customer#000000025 7133.7
Customer#000000008 6819.74
Customer#000000061 1536.24
Customer#000000077 1738.87
Customer#000000097 2164.48
Customer#000000121 6428.32
Customer#000000133 2314.67
Customer#000000007 9561.95
Customer#000000019 8914.71
Customer#000000082 9468.34
Customer#000000124 1842.49
Customer#000000127 9280.71
explain
update customer set c_acctbal = c_acctbal+10 where c_nationkey in (select n_nationkey from nation
where n_regionkey in (1,2))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-10-09' and '1993-06-08');
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY nation ALL PRIMARY,i_n_regionkey NULL NULL NULL 25 Using where
1 PRIMARY customer ref PRIMARY,i_c_nationkey i_c_nationkey 5 dbt3_s001.nation.n_nationkey 6 
1 PRIMARY orders ref|filter i_o_orderdate,i_o_custkey i_o_custkey|i_o_orderdate 5|4 dbt3_s001.customer.c_custkey 15 (9%) Using where; FirstMatch(customer); Using rowid filter
explain format=json
update customer set c_acctbal = c_acctbal+10 where c_nationkey in (select n_nationkey from nation
where n_regionkey in (1,2))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-10-09' and '1993-06-08');
EXPLAIN
{
  "query_block": {
    "select_id": 1,
    "cost": "COST_REPLACED",
    "nested_loop": [
      {
        "table": {
          "table_name": "nation",
          "access_type": "ALL",
          "possible_keys": ["PRIMARY", "i_n_regionkey"],
          "loops": 1,
          "rows": 25,
          "cost": "COST_REPLACED",
          "filtered": 40,
          "attached_condition": "nation.n_regionkey in (1,2)"
        }
      },
      {
        "table": {
          "table_name": "customer",
          "access_type": "ref",
          "possible_keys": ["PRIMARY", "i_c_nationkey"],
          "key": "i_c_nationkey",
          "key_length": "5",
          "used_key_parts": ["c_nationkey"],
          "ref": ["dbt3_s001.nation.n_nationkey"],
          "loops": 10,
          "rows": 6,
          "cost": "COST_REPLACED",
          "filtered": 100
        }
      },
      {
        "table": {
          "table_name": "orders",
          "access_type": "ref",
          "possible_keys": ["i_o_orderdate", "i_o_custkey"],
          "key": "i_o_custkey",
          "key_length": "5",
          "used_key_parts": ["o_custkey"],
          "ref": ["dbt3_s001.customer.c_custkey"],
          "rowid_filter": {
            "range": {
              "key": "i_o_orderdate",
              "used_key_parts": ["o_orderDATE"]
            },
            "rows": 140,
            "selectivity_pct": 9.333333333
          },
          "loops": 60,
          "rows": 15,
          "cost": "COST_REPLACED",
          "filtered": 6.666666508,
          "attached_condition": "orders.o_orderDATE between '1992-10-09' and '1993-06-08'",
          "first_match": "customer"
        }
      }
    ]
  }
}
update customer set c_acctbal = c_acctbal+10 where c_nationkey in (select n_nationkey from nation
where n_regionkey in (1,2))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-10-09' and '1993-06-08');
select c_name, c_acctbal from customer where c_nationkey in (select n_nationkey from nation
where n_regionkey in (1,2))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-10-09' and '1993-06-08');
c_name c_acctbal
Customer#000000059 3468.6
Customer#000000106 3298.42
Customer#000000017 16.34
Customer#000000047 284.58
Customer#000000092 1192.91
Customer#000000101 7480.96
Customer#000000022 601.98
Customer#000000040 1345.3
Customer#000000064 -636.64
Customer#000000122 7875.46
Customer#000000028 1017.18
Customer#000000037 -907.75
Customer#000000091 4653.14
Customer#000000115 7518.92
Customer#000000067 8176.59
Customer#000000094 5510.11
Customer#000000103 2767.45
Customer#000000130 5083.58
Customer#000000139 7907.78
Customer#000000142 2219.81
Customer#000000025 7143.7
Customer#000000008 6829.74
Customer#000000061 1546.24
Customer#000000077 1748.87
Customer#000000097 2174.48
Customer#000000121 6438.32
Customer#000000133 2324.67
Customer#000000007 9571.95
Customer#000000019 8924.71
Customer#000000082 9478.34
Customer#000000124 1852.49
Customer#000000127 9290.71
update customer set c_acctbal = c_acctbal-10 where c_nationkey in (select n_nationkey from nation
where n_regionkey in (1,2))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-10-09' and '1993-06-08');
select c_name, c_acctbal from customer where c_nationkey in (select n_nationkey from nation
where n_regionkey in (1,2))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-10-09' and '1993-06-08');
c_name c_acctbal
Customer#000000059 3458.6
Customer#000000106 3288.42
Customer#000000017 6.34
Customer#000000047 274.58
Customer#000000092 1182.91
Customer#000000101 7470.96
Customer#000000022 591.98
Customer#000000040 1335.3
Customer#000000064 -646.64
Customer#000000122 7865.46
Customer#000000028 1007.18
Customer#000000037 -917.75
Customer#000000091 4643.14
Customer#000000115 7508.92
Customer#000000067 8166.59
Customer#000000094 5500.11
Customer#000000103 2757.45
Customer#000000130 5073.58
Customer#000000139 7897.78
Customer#000000142 2209.81
Customer#000000025 7133.7
Customer#000000008 6819.74
Customer#000000061 1536.24
Customer#000000077 1738.87
Customer#000000097 2164.48
Customer#000000121 6428.32
Customer#000000133 2314.67
Customer#000000007 9561.95
Customer#000000019 8914.71
Customer#000000082 9468.34
Customer#000000124 1842.49
Customer#000000127 9280.71
set optimizer_switch='materialization=default';
explain
select c_name, c_acctbal from customer where c_nationkey in (select n_nationkey from nation where n_name='PERU')
and
c_custkey in (select o_custkey from orders
where o_orderDATE between "1992-01-09" and "1993-01-08");
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY nation ref PRIMARY,i_n_name i_n_name 26 const 1 Using index condition
1 PRIMARY customer ref PRIMARY,i_c_nationkey i_c_nationkey 5 dbt3_s001.nation.n_nationkey 6 
1 PRIMARY orders ref|filter i_o_orderdate,i_o_custkey i_o_custkey|i_o_orderdate 5|4 dbt3_s001.customer.c_custkey 15 (14%) Using where; FirstMatch(customer); Using rowid filter
select c_name, c_acctbal from customer where c_nationkey in (select n_nationkey from nation where n_name='PERU')
and
c_custkey in (select o_custkey from orders
where o_orderDATE between "1992-01-09" and "1993-01-08");
c_name c_acctbal
Customer#000000008 6819.74
Customer#000000035 1228.24
Customer#000000061 1536.24
Customer#000000097 2164.48
Customer#000000121 6428.32
Customer#000000133 2314.67
explain
update customer set c_acctbal = c_acctbal+20 where c_nationkey in (select n_nationkey from nation where n_name='PERU')
and
c_custkey in (select o_custkey from orders
where o_orderDATE between "1992-01-09" and "1993-01-08");
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY nation ref PRIMARY,i_n_name i_n_name 26 const 1 Using index condition
1 PRIMARY customer ref PRIMARY,i_c_nationkey i_c_nationkey 5 dbt3_s001.nation.n_nationkey 6 
1 PRIMARY orders ref|filter i_o_orderdate,i_o_custkey i_o_custkey|i_o_orderdate 5|4 dbt3_s001.customer.c_custkey 15 (14%) Using where; FirstMatch(customer); Using rowid filter
update customer set c_acctbal = c_acctbal+20 where c_nationkey in (select n_nationkey from nation where n_name='PERU')
and
c_custkey in (select o_custkey from orders
where o_orderDATE between "1992-01-09" and "1993-01-08");
select c_name, c_acctbal from customer where c_nationkey in (select n_nationkey from nation where n_name='PERU')
and
c_custkey in (select o_custkey from orders
where o_orderDATE between "1992-01-09" and "1993-01-08");
c_name c_acctbal
Customer#000000008 6839.74
Customer#000000035 1248.24
Customer#000000061 1556.24
Customer#000000097 2184.48
Customer#000000121 6448.32
Customer#000000133 2334.67
update customer set c_acctbal = c_acctbal-20 where c_nationkey in (select n_nationkey from nation where n_name='PERU')
and
c_custkey in (select o_custkey from orders
where o_orderDATE between "1992-01-09" and "1993-01-08");
select c_name, c_acctbal from customer where c_nationkey in (select n_nationkey from nation where n_name='PERU')
and
c_custkey in (select o_custkey from orders
where o_orderDATE between "1992-01-09" and "1993-01-08");
c_name c_acctbal
Customer#000000008 6819.74
Customer#000000035 1228.24
Customer#000000061 1536.24
Customer#000000097 2164.48
Customer#000000121 6428.32
Customer#000000133 2314.67
# Materialization
# ===============
set optimizer_switch='firstmatch=off';
explain
select c_name, c_acctbal from customer where c_nationkey in (select n_nationkey from nation where
n_name in ('JAPAN', 'INDONESIA', 'PERU', 'ARGENTINA'))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between "1992-01-09" and "1995-01-08");
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY nation range PRIMARY,i_n_name i_n_name 26 NULL 4 Using index condition
1 PRIMARY customer ref PRIMARY,i_c_nationkey i_c_nationkey 5 dbt3_s001.nation.n_nationkey 6 
1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 4 func 1 
3 MATERIALIZED orders ALL i_o_orderdate,i_o_custkey NULL NULL NULL 1500 Using where
select c_name, c_acctbal from customer where c_nationkey in (select n_nationkey from nation where
n_name in ('JAPAN', 'INDONESIA', 'PERU', 'ARGENTINA'))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between "1992-01-09" and "1995-01-08");
c_name c_acctbal
Customer#000000014 5266.3
Customer#000000059 3458.6
Customer#000000106 3288.42
Customer#000000067 8166.59
Customer#000000094 5500.11
Customer#000000103 2757.45
Customer#000000130 5073.58
Customer#000000139 7897.78
Customer#000000142 2209.81
Customer#000000025 7133.7
Customer#000000038 6345.11
Customer#000000098 -551.37
Customer#000000113 2912
Customer#000000008 6819.74
Customer#000000035 1228.24
Customer#000000061 1536.24
Customer#000000077 1738.87
Customer#000000097 2164.48
Customer#000000121 6428.32
Customer#000000133 2314.67
explain
update customer set c_acctbal = c_acctbal+20 where c_nationkey in (select n_nationkey from nation where
n_name in ('JAPAN', 'INDONESIA', 'PERU', 'ARGENTINA'))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between "1992-01-09" and "1995-01-08");
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY nation range PRIMARY,i_n_name i_n_name 26 NULL 4 Using index condition
1 PRIMARY customer ref PRIMARY,i_c_nationkey i_c_nationkey 5 dbt3_s001.nation.n_nationkey 6 
1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 4 func 1 
3 MATERIALIZED orders ALL i_o_orderdate,i_o_custkey NULL NULL NULL 1500 Using where
update customer set c_acctbal = c_acctbal+20 where c_nationkey in (select n_nationkey from nation where
n_name in ('JAPAN', 'INDONESIA', 'PERU', 'ARGENTINA'))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between "1992-01-09" and "1995-01-08");
select c_name, c_acctbal from customer where c_nationkey in (select n_nationkey from nation where
n_name in ('JAPAN', 'INDONESIA', 'PERU', 'ARGENTINA'))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between "1992-01-09" and "1995-01-08");
c_name c_acctbal
Customer#000000014 5286.3
Customer#000000059 3478.6
Customer#000000106 3308.42
Customer#000000067 8186.59
Customer#000000094 5520.11
Customer#000000103 2777.45
Customer#000000130 5093.58
Customer#000000139 7917.78
Customer#000000142 2229.81
Customer#000000025 7153.7
Customer#000000038 6365.11
Customer#000000098 -531.37
Customer#000000113 2932
Customer#000000008 6839.74
Customer#000000035 1248.24
Customer#000000061 1556.24
Customer#000000077 1758.87
Customer#000000097 2184.48
Customer#000000121 6448.32
Customer#000000133 2334.67
update customer set c_acctbal = c_acctbal-20 where c_nationkey in (select n_nationkey from nation where
n_name in ('JAPAN', 'INDONESIA', 'PERU', 'ARGENTINA'))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between "1992-01-09" and "1995-01-08");
select c_name, c_acctbal from customer where c_nationkey in (select n_nationkey from nation where
n_name in ('JAPAN', 'INDONESIA', 'PERU', 'ARGENTINA'))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between "1992-01-09" and "1995-01-08");
c_name c_acctbal
Customer#000000014 5266.3
Customer#000000059 3458.6
Customer#000000106 3288.42
Customer#000000067 8166.59
Customer#000000094 5500.11
Customer#000000103 2757.45
Customer#000000130 5073.58
Customer#000000139 7897.78
Customer#000000142 2209.81
Customer#000000025 7133.7
Customer#000000038 6345.11
Customer#000000098 -551.37
Customer#000000113 2912
Customer#000000008 6819.74
Customer#000000035 1228.24
Customer#000000061 1536.24
Customer#000000077 1738.87
Customer#000000097 2164.48
Customer#000000121 6428.32
Customer#000000133 2314.67
set optimizer_switch='firstmatch=default';
explain
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08');
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY customer ALL PRIMARY NULL NULL NULL 150 
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1 
2 MATERIALIZED orders ALL i_o_orderdate,i_o_custkey NULL NULL NULL 1500 Using where
explain format=json
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08');
EXPLAIN
{
  "query_block": {
    "select_id": 1,
    "cost": 0.382051418,
    "nested_loop": [
      {
        "table": {
          "table_name": "customer",
          "access_type": "ALL",
          "possible_keys": ["PRIMARY"],
          "loops": 1,
          "rows": 150,
          "cost": 0.03493875,
          "filtered": 100
        }
      },
      {
        "table": {
          "table_name": "<subquery2>",
          "access_type": "eq_ref",
          "possible_keys": ["distinct_key"],
          "key": "distinct_key",
          "key_length": "4",
          "used_key_parts": ["o_custkey"],
          "ref": ["func"],
          "rows": 1,
          "filtered": 100,
          "materialized": {
            "unique": 1,
            "query_block": {
              "select_id": 2,
              "nested_loop": [
                {
                  "table": {
                    "table_name": "orders",
                    "access_type": "ALL",
                    "possible_keys": ["i_o_orderdate", "i_o_custkey"],
                    "loops": 1,
                    "rows": 1500,
                    "cost": 0.2532975,
                    "filtered": 16.13333321,
                    "attached_condition": "orders.o_orderDATE between '1992-01-09' and '1993-03-08'"
                  }
                }
              ]
            }
          }
        }
      }
    ]
  }
}
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08');
c_name c_acctbal
Customer#000000001 711.56
Customer#000000002 121.65
Customer#000000005 794.47
Customer#000000007 9561.95
Customer#000000008 6819.74
Customer#000000010 2753.54
Customer#000000011 -272.6
Customer#000000013 3857.34
Customer#000000014 5266.3
Customer#000000016 4681.03
Customer#000000017 6.34
Customer#000000019 8914.71
Customer#000000022 591.98
Customer#000000023 3332.02
Customer#000000025 7133.7
Customer#000000028 1007.18
Customer#000000029 7618.27
Customer#000000031 5236.89
Customer#000000032 3471.53
Customer#000000034 8589.7
Customer#000000035 1228.24
Customer#000000037 -917.75
Customer#000000038 6345.11
Customer#000000040 1335.3
Customer#000000041 270.95
Customer#000000043 9904.28
Customer#000000044 7315.94
Customer#000000046 5744.59
Customer#000000047 274.58
Customer#000000049 4573.94
Customer#000000052 5630.28
Customer#000000053 4113.64
Customer#000000055 4572.11
Customer#000000056 6530.86
Customer#000000058 6478.46
Customer#000000059 3458.6
Customer#000000061 1536.24
Customer#000000062 595.61
Customer#000000064 -646.64
Customer#000000065 8795.16
Customer#000000067 8166.59
Customer#000000070 4867.52
Customer#000000071 -611.19
Customer#000000073 4288.5
Customer#000000074 2764.43
Customer#000000076 5745.33
Customer#000000079 5121.28
Customer#000000080 7383.53
Customer#000000082 9468.34
Customer#000000083 6463.51
Customer#000000085 3386.64
Customer#000000086 3306.32
Customer#000000088 8031.44
Customer#000000089 1530.76
Customer#000000091 4643.14
Customer#000000092 1182.91
Customer#000000094 5500.11
Customer#000000095 5327.38
Customer#000000097 2164.48
Customer#000000098 -551.37
Customer#000000100 9889.89
Customer#000000101 7470.96
Customer#000000103 2757.45
Customer#000000104 -588.38
Customer#000000106 3288.42
Customer#000000107 2514.15
Customer#000000109 -716.1
Customer#000000110 7462.99
Customer#000000112 2953.35
Customer#000000115 7508.92
Customer#000000116 8403.99
Customer#000000118 3582.37
Customer#000000121 6428.32
Customer#000000122 7865.46
Customer#000000127 9280.71
Customer#000000128 -986.96
Customer#000000130 5073.58
Customer#000000131 8595.53
Customer#000000133 2314.67
Customer#000000134 4608.9
Customer#000000136 -842.39
Customer#000000137 7838.3
Customer#000000139 7897.78
Customer#000000140 9963.15
Customer#000000142 2209.81
Customer#000000143 2186.5
Customer#000000145 9748.93
Customer#000000148 2135.6
Customer#000000149 8959.65
explain
update customer set c_acctbal = c_acctbal+5 where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08');
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY customer ALL PRIMARY NULL NULL NULL 150 
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1 
2 MATERIALIZED orders ALL i_o_orderdate,i_o_custkey NULL NULL NULL 1500 Using where
explain format=json
update customer set c_acctbal = c_acctbal+5 where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08');
EXPLAIN
{
  "query_block": {
    "select_id": 1,
    "cost": "COST_REPLACED",
    "nested_loop": [
      {
        "table": {
          "table_name": "customer",
          "access_type": "ALL",
          "possible_keys": ["PRIMARY"],
          "loops": 1,
          "rows": 150,
          "cost": "COST_REPLACED",
          "filtered": 100
        }
      },
      {
        "table": {
          "table_name": "<subquery2>",
          "access_type": "eq_ref",
          "possible_keys": ["distinct_key"],
          "key": "distinct_key",
          "key_length": "4",
          "used_key_parts": ["o_custkey"],
          "ref": ["func"],
          "rows": 1,
          "filtered": 100,
          "materialized": {
            "unique": 1,
            "query_block": {
              "select_id": 2,
              "nested_loop": [
                {
                  "table": {
                    "table_name": "orders",
                    "access_type": "ALL",
                    "possible_keys": ["i_o_orderdate", "i_o_custkey"],
                    "loops": 1,
                    "rows": 1500,
                    "cost": "COST_REPLACED",
                    "filtered": 16.13333321,
                    "attached_condition": "orders.o_orderDATE between '1992-01-09' and '1993-03-08'"
                  }
                }
              ]
            }
          }
        }
      }
    ]
  }
}
update customer set c_acctbal = c_acctbal+5 where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08');
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08');
c_name c_acctbal
Customer#000000001 716.56
Customer#000000002 126.65
Customer#000000005 799.47
Customer#000000007 9566.95
Customer#000000008 6824.74
Customer#000000010 2758.54
Customer#000000011 -267.6
Customer#000000013 3862.34
Customer#000000014 5271.3
Customer#000000016 4686.03
Customer#000000017 11.34
Customer#000000019 8919.71
Customer#000000022 596.98
Customer#000000023 3337.02
Customer#000000025 7138.7
Customer#000000028 1012.18
Customer#000000029 7623.27
Customer#000000031 5241.89
Customer#000000032 3476.53
Customer#000000034 8594.7
Customer#000000035 1233.24
Customer#000000037 -912.75
Customer#000000038 6350.11
Customer#000000040 1340.3
Customer#000000041 275.95
Customer#000000043 9909.28
Customer#000000044 7320.94
Customer#000000046 5749.59
Customer#000000047 279.58
Customer#000000049 4578.94
Customer#000000052 5635.28
Customer#000000053 4118.64
Customer#000000055 4577.11
Customer#000000056 6535.86
Customer#000000058 6483.46
Customer#000000059 3463.6
Customer#000000061 1541.24
Customer#000000062 600.61
Customer#000000064 -641.64
Customer#000000065 8800.16
Customer#000000067 8171.59
Customer#000000070 4872.52
Customer#000000071 -606.19
Customer#000000073 4293.5
Customer#000000074 2769.43
Customer#000000076 5750.33
Customer#000000079 5126.28
Customer#000000080 7388.53
Customer#000000082 9473.34
Customer#000000083 6468.51
Customer#000000085 3391.64
Customer#000000086 3311.32
Customer#000000088 8036.44
Customer#000000089 1535.76
Customer#000000091 4648.14
Customer#000000092 1187.91
Customer#000000094 5505.11
Customer#000000095 5332.38
Customer#000000097 2169.48
Customer#000000098 -546.37
Customer#000000100 9894.89
Customer#000000101 7475.96
Customer#000000103 2762.45
Customer#000000104 -583.38
Customer#000000106 3293.42
Customer#000000107 2519.15
Customer#000000109 -711.1
Customer#000000110 7467.99
Customer#000000112 2958.35
Customer#000000115 7513.92
Customer#000000116 8408.99
Customer#000000118 3587.37
Customer#000000121 6433.32
Customer#000000122 7870.46
Customer#000000127 9285.71
Customer#000000128 -981.96
Customer#000000130 5078.58
Customer#000000131 8600.53
Customer#000000133 2319.67
Customer#000000134 4613.9
Customer#000000136 -837.39
Customer#000000137 7843.3
Customer#000000139 7902.78
Customer#000000140 9968.15
Customer#000000142 2214.81
Customer#000000143 2191.5
Customer#000000145 9753.93
Customer#000000148 2140.6
Customer#000000149 8964.65
update customer set c_acctbal = c_acctbal-5 where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08');
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08');
c_name c_acctbal
Customer#000000001 711.56
Customer#000000002 121.65
Customer#000000005 794.47
Customer#000000007 9561.95
Customer#000000008 6819.74
Customer#000000010 2753.54
Customer#000000011 -272.6
Customer#000000013 3857.34
Customer#000000014 5266.3
Customer#000000016 4681.03
Customer#000000017 6.34
Customer#000000019 8914.71
Customer#000000022 591.98
Customer#000000023 3332.02
Customer#000000025 7133.7
Customer#000000028 1007.18
Customer#000000029 7618.27
Customer#000000031 5236.89
Customer#000000032 3471.53
Customer#000000034 8589.7
Customer#000000035 1228.24
Customer#000000037 -917.75
Customer#000000038 6345.11
Customer#000000040 1335.3
Customer#000000041 270.95
Customer#000000043 9904.28
Customer#000000044 7315.94
Customer#000000046 5744.59
Customer#000000047 274.58
Customer#000000049 4573.94
Customer#000000052 5630.28
Customer#000000053 4113.64
Customer#000000055 4572.11
Customer#000000056 6530.86
Customer#000000058 6478.46
Customer#000000059 3458.6
Customer#000000061 1536.24
Customer#000000062 595.61
Customer#000000064 -646.64
Customer#000000065 8795.16
Customer#000000067 8166.59
Customer#000000070 4867.52
Customer#000000071 -611.19
Customer#000000073 4288.5
Customer#000000074 2764.43
Customer#000000076 5745.33
Customer#000000079 5121.28
Customer#000000080 7383.53
Customer#000000082 9468.34
Customer#000000083 6463.51
Customer#000000085 3386.64
Customer#000000086 3306.32
Customer#000000088 8031.44
Customer#000000089 1530.76
Customer#000000091 4643.14
Customer#000000092 1182.91
Customer#000000094 5500.11
Customer#000000095 5327.38
Customer#000000097 2164.48
Customer#000000098 -551.37
Customer#000000100 9889.89
Customer#000000101 7470.96
Customer#000000103 2757.45
Customer#000000104 -588.38
Customer#000000106 3288.42
Customer#000000107 2514.15
Customer#000000109 -716.1
Customer#000000110 7462.99
Customer#000000112 2953.35
Customer#000000115 7508.92
Customer#000000116 8403.99
Customer#000000118 3582.37
Customer#000000121 6428.32
Customer#000000122 7865.46
Customer#000000127 9280.71
Customer#000000128 -986.96
Customer#000000130 5073.58
Customer#000000131 8595.53
Customer#000000133 2314.67
Customer#000000134 4608.9
Customer#000000136 -842.39
Customer#000000137 7838.3
Customer#000000139 7897.78
Customer#000000140 9963.15
Customer#000000142 2209.81
Customer#000000143 2186.5
Customer#000000145 9748.93
Customer#000000148 2135.6
Customer#000000149 8959.65
explain
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-06-09' and '1993-01-08');
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY customer ALL PRIMARY NULL NULL NULL 150 
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1 
2 MATERIALIZED orders range i_o_orderdate,i_o_custkey i_o_orderdate 4 NULL 114 Using index condition; Using where
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-06-09' and '1993-01-08');
c_name c_acctbal
Customer#000000001 711.56
Customer#000000002 121.65
Customer#000000007 9561.95
Customer#000000008 6819.74
Customer#000000010 2753.54
Customer#000000011 -272.6
Customer#000000016 4681.03
Customer#000000017 6.34
Customer#000000019 8914.71
Customer#000000022 591.98
Customer#000000023 3332.02
Customer#000000025 7133.7
Customer#000000028 1007.18
Customer#000000029 7618.27
Customer#000000031 5236.89
Customer#000000034 8589.7
Customer#000000037 -917.75
Customer#000000040 1335.3
Customer#000000043 9904.28
Customer#000000044 7315.94
Customer#000000046 5744.59
Customer#000000047 274.58
Customer#000000049 4573.94
Customer#000000053 4113.64
Customer#000000055 4572.11
Customer#000000061 1536.24
Customer#000000064 -646.64
Customer#000000067 8166.59
Customer#000000070 4867.52
Customer#000000071 -611.19
Customer#000000073 4288.5
Customer#000000074 2764.43
Customer#000000076 5745.33
Customer#000000079 5121.28
Customer#000000080 7383.53
Customer#000000082 9468.34
Customer#000000083 6463.51
Customer#000000085 3386.64
Customer#000000086 3306.32
Customer#000000088 8031.44
Customer#000000091 4643.14
Customer#000000092 1182.91
Customer#000000095 5327.38
Customer#000000097 2164.48
Customer#000000100 9889.89
Customer#000000101 7470.96
Customer#000000103 2757.45
Customer#000000104 -588.38
Customer#000000106 3288.42
Customer#000000109 -716.1
Customer#000000110 7462.99
Customer#000000112 2953.35
Customer#000000118 3582.37
Customer#000000121 6428.32
Customer#000000122 7865.46
Customer#000000127 9280.71
Customer#000000130 5073.58
Customer#000000131 8595.53
Customer#000000133 2314.67
Customer#000000134 4608.9
Customer#000000136 -842.39
Customer#000000137 7838.3
Customer#000000139 7897.78
Customer#000000142 2209.81
Customer#000000143 2186.5
Customer#000000148 2135.6
Customer#000000149 8959.65
explain
update customer set c_acctbal = c_acctbal+1 where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-06-09' and '1993-01-08');
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY customer ALL PRIMARY NULL NULL NULL 150 
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1 
2 MATERIALIZED orders range i_o_orderdate,i_o_custkey i_o_orderdate 4 NULL 114 Using index condition; Using where
update customer set c_acctbal = c_acctbal+1 where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-06-09' and '1993-01-08');
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-06-09' and '1993-01-08');
c_name c_acctbal
Customer#000000001 712.56
Customer#000000002 122.65
Customer#000000007 9562.95
Customer#000000008 6820.74
Customer#000000010 2754.54
Customer#000000011 -271.6
Customer#000000016 4682.03
Customer#000000017 7.34
Customer#000000019 8915.71
Customer#000000022 592.98
Customer#000000023 3333.02
Customer#000000025 7134.7
Customer#000000028 1008.18
Customer#000000029 7619.27
Customer#000000031 5237.89
Customer#000000034 8590.7
Customer#000000037 -916.75
Customer#000000040 1336.3
Customer#000000043 9905.28
Customer#000000044 7316.94
Customer#000000046 5745.59
Customer#000000047 275.58
Customer#000000049 4574.94
Customer#000000053 4114.64
Customer#000000055 4573.11
Customer#000000061 1537.24
Customer#000000064 -645.64
Customer#000000067 8167.59
Customer#000000070 4868.52
Customer#000000071 -610.19
Customer#000000073 4289.5
Customer#000000074 2765.43
Customer#000000076 5746.33
Customer#000000079 5122.28
Customer#000000080 7384.53
Customer#000000082 9469.34
Customer#000000083 6464.51
Customer#000000085 3387.64
Customer#000000086 3307.32
Customer#000000088 8032.44
Customer#000000091 4644.14
Customer#000000092 1183.91
Customer#000000095 5328.38
Customer#000000097 2165.48
Customer#000000100 9890.89
Customer#000000101 7471.96
Customer#000000103 2758.45
Customer#000000104 -587.38
Customer#000000106 3289.42
Customer#000000109 -715.1
Customer#000000110 7463.99
Customer#000000112 2954.35
Customer#000000118 3583.37
Customer#000000121 6429.32
Customer#000000122 7866.46
Customer#000000127 9281.71
Customer#000000130 5074.58
Customer#000000131 8596.53
Customer#000000133 2315.67
Customer#000000134 4609.9
Customer#000000136 -841.39
Customer#000000137 7839.3
Customer#000000139 7898.78
Customer#000000142 2210.81
Customer#000000143 2187.5
Customer#000000148 2136.6
Customer#000000149 8960.65
update customer set c_acctbal = c_acctbal-1 where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-06-09' and '1993-01-08');
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-06-09' and '1993-01-08');
c_name c_acctbal
Customer#000000001 711.56
Customer#000000002 121.65
Customer#000000007 9561.95
Customer#000000008 6819.74
Customer#000000010 2753.54
Customer#000000011 -272.6
Customer#000000016 4681.03
Customer#000000017 6.34
Customer#000000019 8914.71
Customer#000000022 591.98
Customer#000000023 3332.02
Customer#000000025 7133.7
Customer#000000028 1007.18
Customer#000000029 7618.27
Customer#000000031 5236.89
Customer#000000034 8589.7
Customer#000000037 -917.75
Customer#000000040 1335.3
Customer#000000043 9904.28
Customer#000000044 7315.94
Customer#000000046 5744.59
Customer#000000047 274.58
Customer#000000049 4573.94
Customer#000000053 4113.64
Customer#000000055 4572.11
Customer#000000061 1536.24
Customer#000000064 -646.64
Customer#000000067 8166.59
Customer#000000070 4867.52
Customer#000000071 -611.19
Customer#000000073 4288.5
Customer#000000074 2764.43
Customer#000000076 5745.33
Customer#000000079 5121.28
Customer#000000080 7383.53
Customer#000000082 9468.34
Customer#000000083 6463.51
Customer#000000085 3386.64
Customer#000000086 3306.32
Customer#000000088 8031.44
Customer#000000091 4643.14
Customer#000000092 1182.91
Customer#000000095 5327.38
Customer#000000097 2164.48
Customer#000000100 9889.89
Customer#000000101 7470.96
Customer#000000103 2757.45
Customer#000000104 -588.38
Customer#000000106 3288.42
Customer#000000109 -716.1
Customer#000000110 7462.99
Customer#000000112 2953.35
Customer#000000118 3582.37
Customer#000000121 6428.32
Customer#000000122 7865.46
Customer#000000127 9280.71
Customer#000000130 5073.58
Customer#000000131 8595.53
Customer#000000133 2314.67
Customer#000000134 4608.9
Customer#000000136 -842.39
Customer#000000137 7838.3
Customer#000000139 7897.78
Customer#000000142 2209.81
Customer#000000143 2186.5
Customer#000000148 2135.6
Customer#000000149 8959.65
# Materialization SJM
# ===================
explain
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1992-03-08'
                      group by o_custkey having count(o_custkey) > 1);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 28 
1 PRIMARY customer eq_ref PRIMARY PRIMARY 4 <subquery2>.o_custkey 1 
2 MATERIALIZED orders range i_o_orderdate i_o_orderdate 4 NULL 28 Using index condition; Using temporary
explain format=json
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1992-03-08'
                      group by o_custkey having count(o_custkey) > 1);
EXPLAIN
{
  "query_block": {
    "select_id": 1,
    "cost": "COST_REPLACED",
    "nested_loop": [
      {
        "table": {
          "table_name": "<subquery2>",
          "access_type": "ALL",
          "possible_keys": ["distinct_key"],
          "loops": 1,
          "rows": 28,
          "cost": "COST_REPLACED",
          "filtered": 100,
          "materialized": {
            "unique": 1,
            "materialization": {
              "query_block": {
                "select_id": 2,
                "cost": "COST_REPLACED",
                "having_condition": "count(orders.o_custkey) > 1",
                "temporary_table": {
                  "nested_loop": [
                    {
                      "table": {
                        "table_name": "orders",
                        "access_type": "range",
                        "possible_keys": ["i_o_orderdate"],
                        "key": "i_o_orderdate",
                        "key_length": "4",
                        "used_key_parts": ["o_orderDATE"],
                        "loops": 1,
                        "rows": 28,
                        "cost": "COST_REPLACED",
                        "filtered": 100,
                        "index_condition": "orders.o_orderDATE between '1992-01-09' and '1992-03-08'"
                      }
                    }
                  ]
                }
              }
            }
          }
        }
      },
      {
        "table": {
          "table_name": "customer",
          "access_type": "eq_ref",
          "possible_keys": ["PRIMARY"],
          "key": "PRIMARY",
          "key_length": "4",
          "used_key_parts": ["c_custkey"],
          "ref": ["<subquery2>.o_custkey"],
          "loops": 28,
          "rows": 1,
          "cost": "COST_REPLACED",
          "filtered": 100
        }
      }
    ]
  }
}
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1992-03-08'
                      group by o_custkey having count(o_custkey) > 1);
c_name c_acctbal
Customer#000000013 3857.34
Customer#000000032 3471.53
Customer#000000037 -917.75
Customer#000000118 3582.37
Customer#000000056 6530.86
explain
update customer set c_acctbal = c_acctbal-5 where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1992-03-08'
                      group by o_custkey having count(o_custkey) > 1);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 28 
1 PRIMARY customer eq_ref PRIMARY PRIMARY 4 <subquery2>.o_custkey 1 
2 MATERIALIZED orders range i_o_orderdate i_o_orderdate 4 NULL 28 Using index condition; Using temporary
explain format=json
update customer set c_acctbal = c_acctbal-5 where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1992-03-08'
                      group by o_custkey having count(o_custkey) > 1);
EXPLAIN
{
  "query_block": {
    "select_id": 1,
    "cost": "COST_REPLACED",
    "nested_loop": [
      {
        "table": {
          "table_name": "<subquery2>",
          "access_type": "ALL",
          "possible_keys": ["distinct_key"],
          "loops": 1,
          "rows": 28,
          "cost": "COST_REPLACED",
          "filtered": 100,
          "materialized": {
            "unique": 1,
            "materialization": {
              "query_block": {
                "select_id": 2,
                "cost": "COST_REPLACED",
                "having_condition": "count(orders.o_custkey) > 1",
                "temporary_table": {
                  "nested_loop": [
                    {
                      "table": {
                        "table_name": "orders",
                        "access_type": "range",
                        "possible_keys": ["i_o_orderdate"],
                        "key": "i_o_orderdate",
                        "key_length": "4",
                        "used_key_parts": ["o_orderDATE"],
                        "loops": 1,
                        "rows": 28,
                        "cost": "COST_REPLACED",
                        "filtered": 100,
                        "index_condition": "orders.o_orderDATE between '1992-01-09' and '1992-03-08'"
                      }
                    }
                  ]
                }
              }
            }
          }
        }
      },
      {
        "table": {
          "table_name": "customer",
          "access_type": "eq_ref",
          "possible_keys": ["PRIMARY"],
          "key": "PRIMARY",
          "key_length": "4",
          "used_key_parts": ["c_custkey"],
          "ref": ["<subquery2>.o_custkey"],
          "loops": 28,
          "rows": 1,
          "cost": "COST_REPLACED",
          "filtered": 100
        }
      }
    ]
  }
}
update customer set c_acctbal = c_acctbal-5 where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1992-03-08'
                      group by o_custkey having count(o_custkey) > 1);
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1992-03-08'
                      group by o_custkey having count(o_custkey) > 1);
c_name c_acctbal
Customer#000000013 3852.34
Customer#000000032 3466.53
Customer#000000037 -922.75
Customer#000000118 3577.37
Customer#000000056 6525.86
update customer set c_acctbal = c_acctbal+5 where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1992-03-08'
                      group by o_custkey having count(o_custkey) > 1);
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1992-03-08'
                      group by o_custkey having count(o_custkey) > 1);
c_name c_acctbal
Customer#000000013 3857.34
Customer#000000032 3471.53
Customer#000000037 -917.75
Customer#000000118 3582.37
Customer#000000056 6530.86
explain
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08'
                      group by o_custkey having count(o_custkey) > 5);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY customer ALL PRIMARY NULL NULL NULL 150 
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 dbt3_s001.customer.c_custkey 1 
2 MATERIALIZED orders ALL i_o_orderdate NULL NULL NULL 1500 Using where; Using temporary
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08'
                      group by o_custkey having count(o_custkey) > 5);
c_name c_acctbal
Customer#000000007 9561.95
Customer#000000016 4681.03
Customer#000000037 -917.75
Customer#000000046 5744.59
Customer#000000091 4643.14
Customer#000000103 2757.45
Customer#000000118 3582.37
Customer#000000133 2314.67
Customer#000000134 4608.9
explain
update customer set c_acctbal = c_acctbal-1 where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08'
                      group by o_custkey having count(o_custkey) > 5);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY customer ALL PRIMARY NULL NULL NULL 150 
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 dbt3_s001.customer.c_custkey 1 
2 MATERIALIZED orders ALL i_o_orderdate NULL NULL NULL 1500 Using where; Using temporary
update customer set c_acctbal = c_acctbal-1 where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08'
                      group by o_custkey having count(o_custkey) > 5);
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08'
                      group by o_custkey having count(o_custkey) > 5);
c_name c_acctbal
Customer#000000007 9560.95
Customer#000000016 4680.03
Customer#000000037 -918.75
Customer#000000046 5743.59
Customer#000000091 4642.14
Customer#000000103 2756.45
Customer#000000118 3581.37
Customer#000000133 2313.67
Customer#000000134 4607.9
update customer set c_acctbal = c_acctbal+1 where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08'
                      group by o_custkey having count(o_custkey) > 5);
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08'
                      group by o_custkey having count(o_custkey) > 5);
c_name c_acctbal
Customer#000000007 9561.95
Customer#000000016 4681.03
Customer#000000037 -917.75
Customer#000000046 5744.59
Customer#000000091 4643.14
Customer#000000103 2757.45
Customer#000000118 3582.37
Customer#000000133 2314.67
Customer#000000134 4608.9
# Pullout PS
# ==========
prepare stmt from "
update orders set o_totalprice = o_totalprice+? where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (select n_nationkey from nation
where n_name='PERU'));
";
select o_orderkey, o_totalprice from orders where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (select n_nationkey from nation
where n_name='PERU'));
o_orderkey o_totalprice
644 201268.06
2880 145761.99
3142 16030.15
5382 138423.03
5095 184583.99
737 12984.85
1729 12137.76
5121 150334.57
set @a1=-20;
execute stmt using @a1;
select o_orderkey, o_totalprice from orders where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (select n_nationkey from nation
where n_name='PERU'));
o_orderkey o_totalprice
644 201248.06
2880 145741.99
3142 16010.15
5382 138403.03
5095 184563.99
737 12964.85
1729 12117.76
5121 150314.57
set @a2=-10;
execute stmt using @a2;
select o_orderkey, o_totalprice from orders where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (select n_nationkey from nation
where n_name='PERU'));
o_orderkey o_totalprice
644 201238.06
2880 145731.99
3142 16000.15
5382 138393.03
5095 184553.99
737 12954.85
1729 12107.76
5121 150304.57
execute stmt using -(@a1+@a2);
select o_orderkey, o_totalprice from orders where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (select n_nationkey from nation
where n_name='PERU'));
o_orderkey o_totalprice
644 201268.06
2880 145761.99
3142 16030.15
5382 138423.03
5095 184583.99
737 12984.85
1729 12137.76
5121 150334.57
deallocate prepare stmt;
# FirstMatch PS
# =============
set optimizer_switch='materialization=off';
prepare stmt from "
update customer set c_acctbal = c_acctbal+? where c_nationkey in (select n_nationkey from nation
where n_regionkey in (1,2))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-10-09' and '1993-06-08');
";
select c_name, c_acctbal from customer where c_nationkey in (select n_nationkey from nation
where n_regionkey in (1,2))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-10-09' and '1993-06-08');
c_name c_acctbal
Customer#000000059 3458.6
Customer#000000106 3288.42
Customer#000000017 6.34
Customer#000000047 274.58
Customer#000000092 1182.91
Customer#000000101 7470.96
Customer#000000022 591.98
Customer#000000040 1335.3
Customer#000000064 -646.64
Customer#000000122 7865.46
Customer#000000028 1007.18
Customer#000000037 -917.75
Customer#000000091 4643.14
Customer#000000115 7508.92
Customer#000000067 8166.59
Customer#000000094 5500.11
Customer#000000103 2757.45
Customer#000000130 5073.58
Customer#000000139 7897.78
Customer#000000142 2209.81
Customer#000000025 7133.7
Customer#000000008 6819.74
Customer#000000061 1536.24
Customer#000000077 1738.87
Customer#000000097 2164.48
Customer#000000121 6428.32
Customer#000000133 2314.67
Customer#000000007 9561.95
Customer#000000019 8914.71
Customer#000000082 9468.34
Customer#000000124 1842.49
Customer#000000127 9280.71
set @a1=15;
execute stmt using @a1;
select c_name, c_acctbal from customer where c_nationkey in (select n_nationkey from nation
where n_regionkey in (1,2))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-10-09' and '1993-06-08');
c_name c_acctbal
Customer#000000059 3473.6
Customer#000000106 3303.42
Customer#000000017 21.34
Customer#000000047 289.58
Customer#000000092 1197.91
Customer#000000101 7485.96
Customer#000000022 606.98
Customer#000000040 1350.3
Customer#000000064 -631.64
Customer#000000122 7880.46
Customer#000000028 1022.18
Customer#000000037 -902.75
Customer#000000091 4658.14
Customer#000000115 7523.92
Customer#000000067 8181.59
Customer#000000094 5515.11
Customer#000000103 2772.45
Customer#000000130 5088.58
Customer#000000139 7912.78
Customer#000000142 2224.81
Customer#000000025 7148.7
Customer#000000008 6834.74
Customer#000000061 1551.24
Customer#000000077 1753.87
Customer#000000097 2179.48
Customer#000000121 6443.32
Customer#000000133 2329.67
Customer#000000007 9576.95
Customer#000000019 8929.71
Customer#000000082 9483.34
Customer#000000124 1857.49
Customer#000000127 9295.71
set @a2=5;
execute stmt using @a2;
select c_name, c_acctbal from customer where c_nationkey in (select n_nationkey from nation
where n_regionkey in (1,2))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-10-09' and '1993-06-08');
c_name c_acctbal
Customer#000000059 3478.6
Customer#000000106 3308.42
Customer#000000017 26.34
Customer#000000047 294.58
Customer#000000092 1202.91
Customer#000000101 7490.96
Customer#000000022 611.98
Customer#000000040 1355.3
Customer#000000064 -626.64
Customer#000000122 7885.46
Customer#000000028 1027.1799999999998
Customer#000000037 -897.75
Customer#000000091 4663.14
Customer#000000115 7528.92
Customer#000000067 8186.59
Customer#000000094 5520.11
Customer#000000103 2777.45
Customer#000000130 5093.58
Customer#000000139 7917.78
Customer#000000142 2229.81
Customer#000000025 7153.7
Customer#000000008 6839.74
Customer#000000061 1556.24
Customer#000000077 1758.87
Customer#000000097 2184.48
Customer#000000121 6448.32
Customer#000000133 2334.67
Customer#000000007 9581.95
Customer#000000019 8934.71
Customer#000000082 9488.34
Customer#000000124 1862.49
Customer#000000127 9300.71
execute stmt using -(@a1+@a2);
select c_name, c_acctbal from customer where c_nationkey in (select n_nationkey from nation
where n_regionkey in (1,2))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-10-09' and '1993-06-08');
c_name c_acctbal
Customer#000000059 3458.6
Customer#000000106 3288.42
Customer#000000017 6.34
Customer#000000047 274.58
Customer#000000092 1182.91
Customer#000000101 7470.96
Customer#000000022 591.98
Customer#000000040 1335.3
Customer#000000064 -646.64
Customer#000000122 7865.46
Customer#000000028 1007.1799999999998
Customer#000000037 -917.75
Customer#000000091 4643.14
Customer#000000115 7508.92
Customer#000000067 8166.59
Customer#000000094 5500.11
Customer#000000103 2757.45
Customer#000000130 5073.58
Customer#000000139 7897.78
Customer#000000142 2209.81
Customer#000000025 7133.7
Customer#000000008 6819.74
Customer#000000061 1536.24
Customer#000000077 1738.87
Customer#000000097 2164.48
Customer#000000121 6428.32
Customer#000000133 2314.67
Customer#000000007 9561.95
Customer#000000019 8914.71
Customer#000000082 9468.34
Customer#000000124 1842.49
Customer#000000127 9280.71
deallocate prepare stmt;
set optimizer_switch='materialization=default';
# Materialization PS
# ==================
prepare stmt from "
update customer set c_acctbal = c_acctbal+? where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08');
";
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08');
c_name c_acctbal
Customer#000000001 711.56
Customer#000000002 121.65
Customer#000000005 794.47
Customer#000000007 9561.95
Customer#000000008 6819.74
Customer#000000010 2753.54
Customer#000000011 -272.6
Customer#000000013 3857.34
Customer#000000014 5266.3
Customer#000000016 4681.03
Customer#000000017 6.34
Customer#000000019 8914.71
Customer#000000022 591.98
Customer#000000023 3332.02
Customer#000000025 7133.7
Customer#000000028 1007.1799999999998
Customer#000000029 7618.27
Customer#000000031 5236.89
Customer#000000032 3471.53
Customer#000000034 8589.7
Customer#000000035 1228.24
Customer#000000037 -917.75
Customer#000000038 6345.11
Customer#000000040 1335.3
Customer#000000041 270.95
Customer#000000043 9904.28
Customer#000000044 7315.94
Customer#000000046 5744.59
Customer#000000047 274.58
Customer#000000049 4573.94
Customer#000000052 5630.28
Customer#000000053 4113.64
Customer#000000055 4572.11
Customer#000000056 6530.86
Customer#000000058 6478.46
Customer#000000059 3458.6
Customer#000000061 1536.24
Customer#000000062 595.61
Customer#000000064 -646.64
Customer#000000065 8795.16
Customer#000000067 8166.59
Customer#000000070 4867.52
Customer#000000071 -611.19
Customer#000000073 4288.5
Customer#000000074 2764.43
Customer#000000076 5745.33
Customer#000000079 5121.28
Customer#000000080 7383.53
Customer#000000082 9468.34
Customer#000000083 6463.51
Customer#000000085 3386.64
Customer#000000086 3306.32
Customer#000000088 8031.44
Customer#000000089 1530.76
Customer#000000091 4643.14
Customer#000000092 1182.91
Customer#000000094 5500.11
Customer#000000095 5327.38
Customer#000000097 2164.48
Customer#000000098 -551.37
Customer#000000100 9889.89
Customer#000000101 7470.96
Customer#000000103 2757.45
Customer#000000104 -588.38
Customer#000000106 3288.42
Customer#000000107 2514.15
Customer#000000109 -716.1
Customer#000000110 7462.99
Customer#000000112 2953.35
Customer#000000115 7508.92
Customer#000000116 8403.99
Customer#000000118 3582.37
Customer#000000121 6428.32
Customer#000000122 7865.46
Customer#000000127 9280.71
Customer#000000128 -986.96
Customer#000000130 5073.58
Customer#000000131 8595.53
Customer#000000133 2314.67
Customer#000000134 4608.9
Customer#000000136 -842.39
Customer#000000137 7838.3
Customer#000000139 7897.78
Customer#000000140 9963.15
Customer#000000142 2209.81
Customer#000000143 2186.5
Customer#000000145 9748.93
Customer#000000148 2135.6
Customer#000000149 8959.65
set @a1=7;
execute stmt using @a1;
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08');
c_name c_acctbal
Customer#000000001 718.56
Customer#000000002 128.65
Customer#000000005 801.47
Customer#000000007 9568.95
Customer#000000008 6826.74
Customer#000000010 2760.54
Customer#000000011 -265.6
Customer#000000013 3864.34
Customer#000000014 5273.3
Customer#000000016 4688.03
Customer#000000017 13.34
Customer#000000019 8921.71
Customer#000000022 598.98
Customer#000000023 3339.02
Customer#000000025 7140.7
Customer#000000028 1014.1799999999998
Customer#000000029 7625.27
Customer#000000031 5243.89
Customer#000000032 3478.53
Customer#000000034 8596.7
Customer#000000035 1235.24
Customer#000000037 -910.75
Customer#000000038 6352.11
Customer#000000040 1342.3
Customer#000000041 277.95
Customer#000000043 9911.28
Customer#000000044 7322.94
Customer#000000046 5751.59
Customer#000000047 281.58
Customer#000000049 4580.94
Customer#000000052 5637.28
Customer#000000053 4120.64
Customer#000000055 4579.11
Customer#000000056 6537.86
Customer#000000058 6485.46
Customer#000000059 3465.6
Customer#000000061 1543.24
Customer#000000062 602.61
Customer#000000064 -639.64
Customer#000000065 8802.16
Customer#000000067 8173.59
Customer#000000070 4874.52
Customer#000000071 -604.19
Customer#000000073 4295.5
Customer#000000074 2771.43
Customer#000000076 5752.33
Customer#000000079 5128.28
Customer#000000080 7390.53
Customer#000000082 9475.34
Customer#000000083 6470.51
Customer#000000085 3393.64
Customer#000000086 3313.32
Customer#000000088 8038.44
Customer#000000089 1537.76
Customer#000000091 4650.14
Customer#000000092 1189.91
Customer#000000094 5507.11
Customer#000000095 5334.38
Customer#000000097 2171.48
Customer#000000098 -544.37
Customer#000000100 9896.89
Customer#000000101 7477.96
Customer#000000103 2764.45
Customer#000000104 -581.38
Customer#000000106 3295.42
Customer#000000107 2521.15
Customer#000000109 -709.1
Customer#000000110 7469.99
Customer#000000112 2960.35
Customer#000000115 7515.92
Customer#000000116 8410.99
Customer#000000118 3589.37
Customer#000000121 6435.32
Customer#000000122 7872.46
Customer#000000127 9287.71
Customer#000000128 -979.96
Customer#000000130 5080.58
Customer#000000131 8602.53
Customer#000000133 2321.67
Customer#000000134 4615.9
Customer#000000136 -835.39
Customer#000000137 7845.3
Customer#000000139 7904.78
Customer#000000140 9970.15
Customer#000000142 2216.81
Customer#000000143 2193.5
Customer#000000145 9755.93
Customer#000000148 2142.6
Customer#000000149 8966.65
set @a2=3;
execute stmt using @a2;
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08');
c_name c_acctbal
Customer#000000001 721.56
Customer#000000002 131.65
Customer#000000005 804.47
Customer#000000007 9571.95
Customer#000000008 6829.74
Customer#000000010 2763.54
Customer#000000011 -262.6
Customer#000000013 3867.34
Customer#000000014 5276.3
Customer#000000016 4691.03
Customer#000000017 16.34
Customer#000000019 8924.71
Customer#000000022 601.98
Customer#000000023 3342.02
Customer#000000025 7143.7
Customer#000000028 1017.1799999999998
Customer#000000029 7628.27
Customer#000000031 5246.89
Customer#000000032 3481.53
Customer#000000034 8599.7
Customer#000000035 1238.24
Customer#000000037 -907.75
Customer#000000038 6355.11
Customer#000000040 1345.3
Customer#000000041 280.95
Customer#000000043 9914.28
Customer#000000044 7325.94
Customer#000000046 5754.59
Customer#000000047 284.58
Customer#000000049 4583.94
Customer#000000052 5640.28
Customer#000000053 4123.64
Customer#000000055 4582.11
Customer#000000056 6540.86
Customer#000000058 6488.46
Customer#000000059 3468.6
Customer#000000061 1546.24
Customer#000000062 605.61
Customer#000000064 -636.64
Customer#000000065 8805.16
Customer#000000067 8176.59
Customer#000000070 4877.52
Customer#000000071 -601.19
Customer#000000073 4298.5
Customer#000000074 2774.43
Customer#000000076 5755.33
Customer#000000079 5131.28
Customer#000000080 7393.53
Customer#000000082 9478.34
Customer#000000083 6473.51
Customer#000000085 3396.64
Customer#000000086 3316.32
Customer#000000088 8041.44
Customer#000000089 1540.76
Customer#000000091 4653.14
Customer#000000092 1192.91
Customer#000000094 5510.11
Customer#000000095 5337.38
Customer#000000097 2174.48
Customer#000000098 -541.37
Customer#000000100 9899.89
Customer#000000101 7480.96
Customer#000000103 2767.45
Customer#000000104 -578.38
Customer#000000106 3298.42
Customer#000000107 2524.15
Customer#000000109 -706.1
Customer#000000110 7472.99
Customer#000000112 2963.35
Customer#000000115 7518.92
Customer#000000116 8413.99
Customer#000000118 3592.37
Customer#000000121 6438.32
Customer#000000122 7875.46
Customer#000000127 9290.71
Customer#000000128 -976.96
Customer#000000130 5083.58
Customer#000000131 8605.53
Customer#000000133 2324.67
Customer#000000134 4618.9
Customer#000000136 -832.39
Customer#000000137 7848.3
Customer#000000139 7907.78
Customer#000000140 9973.15
Customer#000000142 2219.81
Customer#000000143 2196.5
Customer#000000145 9758.93
Customer#000000148 2145.6
Customer#000000149 8969.65
execute stmt using -(@a1+@a2);
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08');
c_name c_acctbal
Customer#000000001 711.56
Customer#000000002 121.65
Customer#000000005 794.47
Customer#000000007 9561.95
Customer#000000008 6819.74
Customer#000000010 2753.54
Customer#000000011 -272.6
Customer#000000013 3857.34
Customer#000000014 5266.3
Customer#000000016 4681.03
Customer#000000017 6.34
Customer#000000019 8914.71
Customer#000000022 591.98
Customer#000000023 3332.02
Customer#000000025 7133.7
Customer#000000028 1007.1799999999998
Customer#000000029 7618.27
Customer#000000031 5236.89
Customer#000000032 3471.53
Customer#000000034 8589.7
Customer#000000035 1228.24
Customer#000000037 -917.75
Customer#000000038 6345.11
Customer#000000040 1335.3
Customer#000000041 270.95
Customer#000000043 9904.28
Customer#000000044 7315.94
Customer#000000046 5744.59
Customer#000000047 274.58
Customer#000000049 4573.94
Customer#000000052 5630.28
Customer#000000053 4113.64
Customer#000000055 4572.11
Customer#000000056 6530.86
Customer#000000058 6478.46
Customer#000000059 3458.6
Customer#000000061 1536.24
Customer#000000062 595.61
Customer#000000064 -646.64
Customer#000000065 8795.16
Customer#000000067 8166.59
Customer#000000070 4867.52
Customer#000000071 -611.19
Customer#000000073 4288.5
Customer#000000074 2764.43
Customer#000000076 5745.33
Customer#000000079 5121.28
Customer#000000080 7383.53
Customer#000000082 9468.34
Customer#000000083 6463.51
Customer#000000085 3386.64
Customer#000000086 3306.32
Customer#000000088 8031.44
Customer#000000089 1530.76
Customer#000000091 4643.14
Customer#000000092 1182.91
Customer#000000094 5500.11
Customer#000000095 5327.38
Customer#000000097 2164.48
Customer#000000098 -551.37
Customer#000000100 9889.89
Customer#000000101 7470.96
Customer#000000103 2757.45
Customer#000000104 -588.38
Customer#000000106 3288.42
Customer#000000107 2514.15
Customer#000000109 -716.1
Customer#000000110 7462.99
Customer#000000112 2953.35
Customer#000000115 7508.92
Customer#000000116 8403.99
Customer#000000118 3582.37
Customer#000000121 6428.32
Customer#000000122 7865.46
Customer#000000127 9280.71
Customer#000000128 -986.96
Customer#000000130 5073.58
Customer#000000131 8595.53
Customer#000000133 2314.67
Customer#000000134 4608.9
Customer#000000136 -842.39
Customer#000000137 7838.3
Customer#000000139 7897.78
Customer#000000140 9963.15
Customer#000000142 2209.81
Customer#000000143 2186.5
Customer#000000145 9748.93
Customer#000000148 2135.6
Customer#000000149 8959.65
deallocate prepare stmt;
# Materialization SJM PS
# ======================
prepare stmt from "
update customer set c_acctbal = c_acctbal+? where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1992-03-08'
                      group by o_custkey having count(o_custkey) > 1);
";
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1992-03-08'
                      group by o_custkey having count(o_custkey) > 1);
c_name c_acctbal
Customer#000000013 3857.34
Customer#000000032 3471.53
Customer#000000037 -917.75
Customer#000000118 3582.37
Customer#000000056 6530.86
set @a1=-2;
execute stmt using @a1;
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1992-03-08'
                      group by o_custkey having count(o_custkey) > 1);
c_name c_acctbal
Customer#000000013 3855.34
Customer#000000032 3469.53
Customer#000000037 -919.75
Customer#000000118 3580.37
Customer#000000056 6528.86
set @a2=-1;
execute stmt using @a2;
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1992-03-08'
                      group by o_custkey having count(o_custkey) > 1);
c_name c_acctbal
Customer#000000013 3854.34
Customer#000000032 3468.53
Customer#000000037 -920.75
Customer#000000118 3579.37
Customer#000000056 6527.86
execute stmt using -(@a1+@a2);
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1992-03-08'
                      group by o_custkey having count(o_custkey) > 1);
c_name c_acctbal
Customer#000000013 3857.34
Customer#000000032 3471.53
Customer#000000037 -917.75
Customer#000000118 3582.37
Customer#000000056 6530.86
deallocate prepare stmt;
# Pullout SP
# ==========
create procedure p(d int)
update orders set o_totalprice = o_totalprice+d where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (select n_nationkey from nation
where n_name='PERU'));
select o_orderkey, o_totalprice from orders where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (select n_nationkey from nation
where n_name='PERU'));
o_orderkey o_totalprice
644 201268.06
2880 145761.99
3142 16030.15
5382 138423.03
5095 184583.99
737 12984.85
1729 12137.76
5121 150334.57
call p(-10);
select o_orderkey, o_totalprice from orders where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (select n_nationkey from nation
where n_name='PERU'));
o_orderkey o_totalprice
644 201258.06
2880 145751.99
3142 16020.15
5382 138413.03
5095 184573.99
737 12974.85
1729 12127.76
5121 150324.57
call p(-20);
select o_orderkey, o_totalprice from orders where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (select n_nationkey from nation
where n_name='PERU'));
o_orderkey o_totalprice
644 201238.06
2880 145731.99
3142 16000.15
5382 138393.03
5095 184553.99
737 12954.85
1729 12107.76
5121 150304.57
call p(10+20);
select o_orderkey, o_totalprice from orders where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (select n_nationkey from nation
where n_name='PERU'));
o_orderkey o_totalprice
644 201268.06
2880 145761.99
3142 16030.15
5382 138423.03
5095 184583.99
737 12984.85
1729 12137.76
5121 150334.57
drop procedure p;
# FirstMatch SP
# =============
set optimizer_switch='materialization=off';
create procedure p(d int)
update customer set c_acctbal = c_acctbal+d where c_nationkey in (select n_nationkey from nation
where n_regionkey in (1,2))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-10-09' and '1993-06-08');
select c_name, c_acctbal from customer where c_nationkey in (select n_nationkey from nation
where n_regionkey in (1,2))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-10-09' and '1993-06-08');
c_name c_acctbal
Customer#000000059 3458.6
Customer#000000106 3288.42
Customer#000000017 6.34
Customer#000000047 274.58
Customer#000000092 1182.91
Customer#000000101 7470.96
Customer#000000022 591.98
Customer#000000040 1335.3
Customer#000000064 -646.64
Customer#000000122 7865.46
Customer#000000028 1007.1799999999998
Customer#000000037 -917.75
Customer#000000091 4643.14
Customer#000000115 7508.92
Customer#000000067 8166.59
Customer#000000094 5500.11
Customer#000000103 2757.45
Customer#000000130 5073.58
Customer#000000139 7897.78
Customer#000000142 2209.81
Customer#000000025 7133.7
Customer#000000008 6819.74
Customer#000000061 1536.24
Customer#000000077 1738.87
Customer#000000097 2164.48
Customer#000000121 6428.32
Customer#000000133 2314.67
Customer#000000007 9561.95
Customer#000000019 8914.71
Customer#000000082 9468.34
Customer#000000124 1842.49
Customer#000000127 9280.71
call p(5);
select c_name, c_acctbal from customer where c_nationkey in (select n_nationkey from nation
where n_regionkey in (1,2))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-10-09' and '1993-06-08');
c_name c_acctbal
Customer#000000059 3463.6
Customer#000000106 3293.42
Customer#000000017 11.34
Customer#000000047 279.58
Customer#000000092 1187.91
Customer#000000101 7475.96
Customer#000000022 596.98
Customer#000000040 1340.3
Customer#000000064 -641.64
Customer#000000122 7870.46
Customer#000000028 1012.1799999999998
Customer#000000037 -912.75
Customer#000000091 4648.14
Customer#000000115 7513.92
Customer#000000067 8171.59
Customer#000000094 5505.11
Customer#000000103 2762.45
Customer#000000130 5078.58
Customer#000000139 7902.78
Customer#000000142 2214.81
Customer#000000025 7138.7
Customer#000000008 6824.74
Customer#000000061 1541.24
Customer#000000077 1743.87
Customer#000000097 2169.48
Customer#000000121 6433.32
Customer#000000133 2319.67
Customer#000000007 9566.95
Customer#000000019 8919.71
Customer#000000082 9473.34
Customer#000000124 1847.49
Customer#000000127 9285.71
call p(15);
select c_name, c_acctbal from customer where c_nationkey in (select n_nationkey from nation
where n_regionkey in (1,2))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-10-09' and '1993-06-08');
c_name c_acctbal
Customer#000000059 3478.6
Customer#000000106 3308.42
Customer#000000017 26.34
Customer#000000047 294.58
Customer#000000092 1202.91
Customer#000000101 7490.96
Customer#000000022 611.98
Customer#000000040 1355.3
Customer#000000064 -626.64
Customer#000000122 7885.46
Customer#000000028 1027.1799999999998
Customer#000000037 -897.75
Customer#000000091 4663.14
Customer#000000115 7528.92
Customer#000000067 8186.59
Customer#000000094 5520.11
Customer#000000103 2777.45
Customer#000000130 5093.58
Customer#000000139 7917.78
Customer#000000142 2229.81
Customer#000000025 7153.7
Customer#000000008 6839.74
Customer#000000061 1556.24
Customer#000000077 1758.87
Customer#000000097 2184.48
Customer#000000121 6448.32
Customer#000000133 2334.67
Customer#000000007 9581.95
Customer#000000019 8934.71
Customer#000000082 9488.34
Customer#000000124 1862.49
Customer#000000127 9300.71
call p(-(5+15));
select c_name, c_acctbal from customer where c_nationkey in (select n_nationkey from nation
where n_regionkey in (1,2))
and
c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-10-09' and '1993-06-08');
c_name c_acctbal
Customer#000000059 3458.6
Customer#000000106 3288.42
Customer#000000017 6.34
Customer#000000047 274.58
Customer#000000092 1182.91
Customer#000000101 7470.96
Customer#000000022 591.98
Customer#000000040 1335.3
Customer#000000064 -646.64
Customer#000000122 7865.46
Customer#000000028 1007.1799999999998
Customer#000000037 -917.75
Customer#000000091 4643.14
Customer#000000115 7508.92
Customer#000000067 8166.59
Customer#000000094 5500.11
Customer#000000103 2757.45
Customer#000000130 5073.58
Customer#000000139 7897.78
Customer#000000142 2209.81
Customer#000000025 7133.7
Customer#000000008 6819.74
Customer#000000061 1536.24
Customer#000000077 1738.87
Customer#000000097 2164.48
Customer#000000121 6428.32
Customer#000000133 2314.67
Customer#000000007 9561.95
Customer#000000019 8914.71
Customer#000000082 9468.34
Customer#000000124 1842.49
Customer#000000127 9280.71
drop procedure p;
set optimizer_switch='materialization=default';
# Materialization SP
# ==================
create procedure p(d int)
update customer set c_acctbal = c_acctbal+d where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08');
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08');
c_name c_acctbal
Customer#000000001 711.56
Customer#000000002 121.65
Customer#000000005 794.47
Customer#000000007 9561.95
Customer#000000008 6819.74
Customer#000000010 2753.54
Customer#000000011 -272.6
Customer#000000013 3857.34
Customer#000000014 5266.3
Customer#000000016 4681.03
Customer#000000017 6.34
Customer#000000019 8914.71
Customer#000000022 591.98
Customer#000000023 3332.02
Customer#000000025 7133.7
Customer#000000028 1007.1799999999998
Customer#000000029 7618.27
Customer#000000031 5236.89
Customer#000000032 3471.53
Customer#000000034 8589.7
Customer#000000035 1228.24
Customer#000000037 -917.75
Customer#000000038 6345.11
Customer#000000040 1335.3
Customer#000000041 270.95
Customer#000000043 9904.28
Customer#000000044 7315.94
Customer#000000046 5744.59
Customer#000000047 274.58
Customer#000000049 4573.94
Customer#000000052 5630.28
Customer#000000053 4113.64
Customer#000000055 4572.11
Customer#000000056 6530.86
Customer#000000058 6478.46
Customer#000000059 3458.6
Customer#000000061 1536.24
Customer#000000062 595.61
Customer#000000064 -646.64
Customer#000000065 8795.16
Customer#000000067 8166.59
Customer#000000070 4867.52
Customer#000000071 -611.19
Customer#000000073 4288.5
Customer#000000074 2764.43
Customer#000000076 5745.33
Customer#000000079 5121.28
Customer#000000080 7383.53
Customer#000000082 9468.34
Customer#000000083 6463.51
Customer#000000085 3386.64
Customer#000000086 3306.32
Customer#000000088 8031.44
Customer#000000089 1530.76
Customer#000000091 4643.14
Customer#000000092 1182.91
Customer#000000094 5500.11
Customer#000000095 5327.38
Customer#000000097 2164.48
Customer#000000098 -551.37
Customer#000000100 9889.89
Customer#000000101 7470.96
Customer#000000103 2757.45
Customer#000000104 -588.38
Customer#000000106 3288.42
Customer#000000107 2514.15
Customer#000000109 -716.1
Customer#000000110 7462.99
Customer#000000112 2953.35
Customer#000000115 7508.92
Customer#000000116 8403.99
Customer#000000118 3582.37
Customer#000000121 6428.32
Customer#000000122 7865.46
Customer#000000127 9280.71
Customer#000000128 -986.96
Customer#000000130 5073.58
Customer#000000131 8595.53
Customer#000000133 2314.67
Customer#000000134 4608.9
Customer#000000136 -842.39
Customer#000000137 7838.3
Customer#000000139 7897.78
Customer#000000140 9963.15
Customer#000000142 2209.81
Customer#000000143 2186.5
Customer#000000145 9748.93
Customer#000000148 2135.6
Customer#000000149 8959.65
call p(3);
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08');
c_name c_acctbal
Customer#000000001 714.56
Customer#000000002 124.65
Customer#000000005 797.47
Customer#000000007 9564.95
Customer#000000008 6822.74
Customer#000000010 2756.54
Customer#000000011 -269.6
Customer#000000013 3860.34
Customer#000000014 5269.3
Customer#000000016 4684.03
Customer#000000017 9.34
Customer#000000019 8917.71
Customer#000000022 594.98
Customer#000000023 3335.02
Customer#000000025 7136.7
Customer#000000028 1010.1799999999998
Customer#000000029 7621.27
Customer#000000031 5239.89
Customer#000000032 3474.53
Customer#000000034 8592.7
Customer#000000035 1231.24
Customer#000000037 -914.75
Customer#000000038 6348.11
Customer#000000040 1338.3
Customer#000000041 273.95
Customer#000000043 9907.28
Customer#000000044 7318.94
Customer#000000046 5747.59
Customer#000000047 277.58
Customer#000000049 4576.94
Customer#000000052 5633.28
Customer#000000053 4116.64
Customer#000000055 4575.11
Customer#000000056 6533.86
Customer#000000058 6481.46
Customer#000000059 3461.6
Customer#000000061 1539.24
Customer#000000062 598.61
Customer#000000064 -643.64
Customer#000000065 8798.16
Customer#000000067 8169.59
Customer#000000070 4870.52
Customer#000000071 -608.19
Customer#000000073 4291.5
Customer#000000074 2767.43
Customer#000000076 5748.33
Customer#000000079 5124.28
Customer#000000080 7386.53
Customer#000000082 9471.34
Customer#000000083 6466.51
Customer#000000085 3389.64
Customer#000000086 3309.32
Customer#000000088 8034.44
Customer#000000089 1533.76
Customer#000000091 4646.14
Customer#000000092 1185.91
Customer#000000094 5503.11
Customer#000000095 5330.38
Customer#000000097 2167.48
Customer#000000098 -548.37
Customer#000000100 9892.89
Customer#000000101 7473.96
Customer#000000103 2760.45
Customer#000000104 -585.38
Customer#000000106 3291.42
Customer#000000107 2517.15
Customer#000000109 -713.1
Customer#000000110 7465.99
Customer#000000112 2956.35
Customer#000000115 7511.92
Customer#000000116 8406.99
Customer#000000118 3585.37
Customer#000000121 6431.32
Customer#000000122 7868.46
Customer#000000127 9283.71
Customer#000000128 -983.96
Customer#000000130 5076.58
Customer#000000131 8598.53
Customer#000000133 2317.67
Customer#000000134 4611.9
Customer#000000136 -839.39
Customer#000000137 7841.3
Customer#000000139 7900.78
Customer#000000140 9966.15
Customer#000000142 2212.81
Customer#000000143 2189.5
Customer#000000145 9751.93
Customer#000000148 2138.6
Customer#000000149 8962.65
call p(7);
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08');
c_name c_acctbal
Customer#000000001 721.56
Customer#000000002 131.65
Customer#000000005 804.47
Customer#000000007 9571.95
Customer#000000008 6829.74
Customer#000000010 2763.54
Customer#000000011 -262.6
Customer#000000013 3867.34
Customer#000000014 5276.3
Customer#000000016 4691.03
Customer#000000017 16.34
Customer#000000019 8924.71
Customer#000000022 601.98
Customer#000000023 3342.02
Customer#000000025 7143.7
Customer#000000028 1017.1799999999998
Customer#000000029 7628.27
Customer#000000031 5246.89
Customer#000000032 3481.53
Customer#000000034 8599.7
Customer#000000035 1238.24
Customer#000000037 -907.75
Customer#000000038 6355.11
Customer#000000040 1345.3
Customer#000000041 280.95
Customer#000000043 9914.28
Customer#000000044 7325.94
Customer#000000046 5754.59
Customer#000000047 284.58
Customer#000000049 4583.94
Customer#000000052 5640.28
Customer#000000053 4123.64
Customer#000000055 4582.11
Customer#000000056 6540.86
Customer#000000058 6488.46
Customer#000000059 3468.6
Customer#000000061 1546.24
Customer#000000062 605.61
Customer#000000064 -636.64
Customer#000000065 8805.16
Customer#000000067 8176.59
Customer#000000070 4877.52
Customer#000000071 -601.19
Customer#000000073 4298.5
Customer#000000074 2774.43
Customer#000000076 5755.33
Customer#000000079 5131.28
Customer#000000080 7393.53
Customer#000000082 9478.34
Customer#000000083 6473.51
Customer#000000085 3396.64
Customer#000000086 3316.32
Customer#000000088 8041.44
Customer#000000089 1540.76
Customer#000000091 4653.14
Customer#000000092 1192.91
Customer#000000094 5510.11
Customer#000000095 5337.38
Customer#000000097 2174.48
Customer#000000098 -541.37
Customer#000000100 9899.89
Customer#000000101 7480.96
Customer#000000103 2767.45
Customer#000000104 -578.38
Customer#000000106 3298.42
Customer#000000107 2524.15
Customer#000000109 -706.1
Customer#000000110 7472.99
Customer#000000112 2963.35
Customer#000000115 7518.92
Customer#000000116 8413.99
Customer#000000118 3592.37
Customer#000000121 6438.32
Customer#000000122 7875.46
Customer#000000127 9290.71
Customer#000000128 -976.96
Customer#000000130 5083.58
Customer#000000131 8605.53
Customer#000000133 2324.67
Customer#000000134 4618.9
Customer#000000136 -832.39
Customer#000000137 7848.3
Customer#000000139 7907.78
Customer#000000140 9973.15
Customer#000000142 2219.81
Customer#000000143 2196.5
Customer#000000145 9758.93
Customer#000000148 2145.6
Customer#000000149 8969.65
call p(-(3+7));
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1993-03-08');
c_name c_acctbal
Customer#000000001 711.56
Customer#000000002 121.65
Customer#000000005 794.47
Customer#000000007 9561.95
Customer#000000008 6819.74
Customer#000000010 2753.54
Customer#000000011 -272.6
Customer#000000013 3857.34
Customer#000000014 5266.3
Customer#000000016 4681.03
Customer#000000017 6.34
Customer#000000019 8914.71
Customer#000000022 591.98
Customer#000000023 3332.02
Customer#000000025 7133.7
Customer#000000028 1007.1799999999998
Customer#000000029 7618.27
Customer#000000031 5236.89
Customer#000000032 3471.53
Customer#000000034 8589.7
Customer#000000035 1228.24
Customer#000000037 -917.75
Customer#000000038 6345.11
Customer#000000040 1335.3
Customer#000000041 270.95
Customer#000000043 9904.28
Customer#000000044 7315.94
Customer#000000046 5744.59
Customer#000000047 274.58
Customer#000000049 4573.94
Customer#000000052 5630.28
Customer#000000053 4113.64
Customer#000000055 4572.11
Customer#000000056 6530.86
Customer#000000058 6478.46
Customer#000000059 3458.6
Customer#000000061 1536.24
Customer#000000062 595.61
Customer#000000064 -646.64
Customer#000000065 8795.16
Customer#000000067 8166.59
Customer#000000070 4867.52
Customer#000000071 -611.19
Customer#000000073 4288.5
Customer#000000074 2764.43
Customer#000000076 5745.33
Customer#000000079 5121.28
Customer#000000080 7383.53
Customer#000000082 9468.34
Customer#000000083 6463.51
Customer#000000085 3386.64
Customer#000000086 3306.32
Customer#000000088 8031.44
Customer#000000089 1530.76
Customer#000000091 4643.14
Customer#000000092 1182.91
Customer#000000094 5500.11
Customer#000000095 5327.38
Customer#000000097 2164.48
Customer#000000098 -551.37
Customer#000000100 9889.89
Customer#000000101 7470.96
Customer#000000103 2757.45
Customer#000000104 -588.38
Customer#000000106 3288.42
Customer#000000107 2514.15
Customer#000000109 -716.1
Customer#000000110 7462.99
Customer#000000112 2953.35
Customer#000000115 7508.92
Customer#000000116 8403.99
Customer#000000118 3582.37
Customer#000000121 6428.32
Customer#000000122 7865.46
Customer#000000127 9280.71
Customer#000000128 -986.96
Customer#000000130 5073.58
Customer#000000131 8595.53
Customer#000000133 2314.67
Customer#000000134 4608.9
Customer#000000136 -842.39
Customer#000000137 7838.3
Customer#000000139 7897.78
Customer#000000140 9963.15
Customer#000000142 2209.81
Customer#000000143 2186.5
Customer#000000145 9748.93
Customer#000000148 2135.6
Customer#000000149 8959.65
drop procedure p;
# Materialization SJM SP
# ======================
create procedure p(d int)
update customer set c_acctbal = c_acctbal+d where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1992-03-08'
                      group by o_custkey having count(o_custkey) > 1);
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1992-03-08'
                      group by o_custkey having count(o_custkey) > 1);
c_name c_acctbal
Customer#000000013 3857.34
Customer#000000032 3471.53
Customer#000000037 -917.75
Customer#000000118 3582.37
Customer#000000056 6530.86
call p(-1);
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1992-03-08'
                      group by o_custkey having count(o_custkey) > 1);
c_name c_acctbal
Customer#000000013 3856.34
Customer#000000032 3470.53
Customer#000000037 -918.75
Customer#000000118 3581.37
Customer#000000056 6529.86
call p(-2);
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1992-03-08'
                      group by o_custkey having count(o_custkey) > 1);
c_name c_acctbal
Customer#000000013 3854.34
Customer#000000032 3468.53
Customer#000000037 -920.75
Customer#000000118 3579.37
Customer#000000056 6527.86
call p(1+2);
select c_name, c_acctbal from customer where c_custkey in (select o_custkey from orders
where o_orderDATE between '1992-01-09' and '1992-03-08'
                      group by o_custkey having count(o_custkey) > 1);
c_name c_acctbal
Customer#000000013 3857.34
Customer#000000032 3471.53
Customer#000000037 -917.75
Customer#000000118 3582.37
Customer#000000056 6530.86
drop procedure p;
# Checking limitations
# ====================
select o_orderkey, o_totalprice from orders where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (1,2));
o_orderkey o_totalprice
1221 117397.16
324 26868.85
1856 189361.42
1344 43809.37
1925 146382.71
3139 40975.96
4903 34363.63
5607 24660.06
# Should not use semi-join conversion because has ORDER BY ... LIMIT
explain
update orders set o_totalprice = o_totalprice-50 where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (1,2))
order by o_totalprice limit 500;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY orders range i_o_orderdate i_o_orderdate 4 NULL 108 Using where; Using filesort
2 DEPENDENT SUBQUERY customer unique_subquery PRIMARY,i_c_nationkey PRIMARY 4 func 1 Using where
update orders set o_totalprice = o_totalprice-50 where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (1,2))
order by o_totalprice limit 500;
select o_orderkey, o_totalprice from orders where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (1,2));
o_orderkey o_totalprice
1221 117347.16
324 26818.85
1856 189311.42
1344 43759.37
1925 146332.71
3139 40925.96
4903 34313.63
5607 24610.06
update orders set o_totalprice = o_totalprice+50 where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (1,2))
order by o_totalprice limit 500;
select o_orderkey, o_totalprice from orders where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (1,2));
o_orderkey o_totalprice
1221 117397.16
324 26868.85
1856 189361.42
1344 43809.37
1925 146382.71
3139 40975.96
4903 34363.63
5607 24660.06
# Should use semi-join converion
explain
update orders set o_totalprice = o_totalprice-50 where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (1,2));
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY customer range PRIMARY,i_c_nationkey i_c_nationkey 5 NULL 15 Using index condition
1 PRIMARY orders ref|filter i_o_orderdate,i_o_custkey i_o_custkey|i_o_orderdate 5|4 dbt3_s001.customer.c_custkey 15 (7%) Using where; Using rowid filter
update orders set o_totalprice = o_totalprice-50 where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (1,2));
select o_orderkey, o_totalprice from orders where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (1,2));
o_orderkey o_totalprice
1221 117347.16
324 26818.85
1856 189311.42
1344 43759.37
1925 146332.71
3139 40925.96
4903 34313.63
5607 24610.06
update orders set o_totalprice = o_totalprice+50 where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (1,2));
select o_orderkey, o_totalprice from orders where o_orderDATE between '1992-01-01' and '1992-06-30' and
o_custkey in (select c_custkey from customer
where c_nationkey in (1,2));
o_orderkey o_totalprice
1221 117397.16
324 26868.85
1856 189361.42
1344 43809.37
1925 146382.71
3139 40975.96
4903 34363.63
5607 24660.06
CREATE TABLE partsupp_small (
ps_partkey int(11) NOT NULL DEFAULT '0',
ps_suppkey int(11) NOT NULL DEFAULT '0',
ps_availqty int(11) DEFAULT NULL,
ps_supplycost double DEFAULT NULL,
ps_comment varchar(199) DEFAULT NULL,
PRIMARY KEY (ps_partkey,ps_suppkey),
KEY i_ps_partkey (ps_partkey),
KEY i_ps_suppkey (ps_suppkey)
);
create index i_ps_sup_part on partsupp_small(ps_suppkey, ps_partkey);
insert into partsupp_small select * from partsupp where ps_partkey <50;
analyze table partsupp_small  persistent for all;
Table Op Msg_type Msg_text
dbt3_s001.partsupp_small analyze status Engine-independent statistics collected
dbt3_s001.partsupp_small analyze status OK
# LooseScan
# =========
explain
select count(*) from lineitem where l_suppkey in
(select ps_suppkey from partsupp_small
where ps_partkey in (1,2,3));
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY partsupp_small index PRIMARY,i_ps_partkey,i_ps_suppkey,i_ps_sup_part i_ps_sup_part 8 NULL 176 Using where; Using index; LooseScan
1 PRIMARY lineitem ref i_l_suppkey i_l_suppkey 5 dbt3_s001.partsupp_small.ps_suppkey 600 Using index
explain format=json
select count(*) from lineitem where l_suppkey in
(select ps_suppkey from partsupp_small
where ps_partkey in (1,2,3));
EXPLAIN
{
  "query_block": {
    "select_id": 1,
    "cost": "COST_REPLACED",
    "nested_loop": [
      {
        "table": {
          "table_name": "partsupp_small",
          "access_type": "index",
          "possible_keys": [
            "PRIMARY",
            "i_ps_partkey",
            "i_ps_suppkey",
            "i_ps_sup_part"
          ],
          "key": "i_ps_sup_part",
          "key_length": "8",
          "used_key_parts": ["ps_suppkey", "ps_partkey"],
          "loops": 1,
          "rows": 176,
          "cost": "COST_REPLACED",
          "filtered": 5.113636494,
          "attached_condition": "partsupp_small.ps_partkey in (1,2,3)",
          "using_index": true,
          "loose_scan": true
        }
      },
      {
        "table": {
          "table_name": "lineitem",
          "access_type": "ref",
          "possible_keys": ["i_l_suppkey"],
          "key": "i_l_suppkey",
          "key_length": "5",
          "used_key_parts": ["l_suppkey"],
          "ref": ["dbt3_s001.partsupp_small.ps_suppkey"],
          "loops": 9,
          "rows": 600,
          "cost": "COST_REPLACED",
          "filtered": 11.11111069,
          "using_index": true
        }
      }
    ]
  }
}
select count(*) from lineitem where l_suppkey in
(select ps_suppkey from partsupp_small
where ps_partkey in (1,2,3));
count(*)
5373
select  5373 as count, 136458704.22 as old_sum;
count old_sum
5373 136458704.22
explain
update  lineitem set l_extendedprice=l_extendedprice+10 where l_suppkey in
(select ps_suppkey from partsupp_small
where ps_partkey in (1,2,3));
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY lineitem ALL i_l_suppkey NULL NULL NULL 6005 
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1 
2 MATERIALIZED partsupp_small range PRIMARY,i_ps_partkey,i_ps_suppkey,i_ps_sup_part PRIMARY 4 NULL 9 Using where; Using index
explain format=json
update  lineitem set l_extendedprice=l_extendedprice+10 where l_suppkey in
(select ps_suppkey from partsupp_small
where ps_partkey in (1,2,3));
EXPLAIN
{
  "query_block": {
    "select_id": 1,
    "cost": "COST_REPLACED",
    "nested_loop": [
      {
        "table": {
          "table_name": "lineitem",
          "access_type": "ALL",
          "possible_keys": ["i_l_suppkey"],
          "loops": 1,
          "rows": 6005,
          "cost": "COST_REPLACED",
          "filtered": 100
        }
      },
      {
        "table": {
          "table_name": "<subquery2>",
          "access_type": "eq_ref",
          "possible_keys": ["distinct_key"],
          "key": "distinct_key",
          "key_length": "4",
          "used_key_parts": ["ps_suppkey"],
          "ref": ["func"],
          "rows": 1,
          "filtered": 100,
          "materialized": {
            "unique": 1,
            "query_block": {
              "select_id": 2,
              "nested_loop": [
                {
                  "table": {
                    "table_name": "partsupp_small",
                    "access_type": "range",
                    "possible_keys": [
                      "PRIMARY",
                      "i_ps_partkey",
                      "i_ps_suppkey",
                      "i_ps_sup_part"
                    ],
                    "key": "PRIMARY",
                    "key_length": "4",
                    "used_key_parts": ["ps_partkey"],
                    "loops": 1,
                    "rows": 9,
                    "cost": "COST_REPLACED",
                    "filtered": 100,
                    "attached_condition": "partsupp_small.ps_partkey in (1,2,3)",
                    "using_index": true
                  }
                }
              ]
            }
          }
        }
      }
    ]
  }
}
update  lineitem set l_extendedprice=l_extendedprice+10 where l_suppkey in
(select ps_suppkey from partsupp_small
where ps_partkey in (1,2,3));
select ROUND(sum(l_extendedprice),2), 5373 as count,
(136458704.22+10*5373) as 'old_sum+10*count'
        from lineitem where l_suppkey in
(select ps_suppkey from partsupp_small
where ps_partkey in (1,2,3));
ROUND(sum(l_extendedprice),2) count old_sum+10*count
136512434.22 5373 136512434.22
update  lineitem set l_extendedprice=l_extendedprice-10 where l_suppkey in
(select ps_suppkey from partsupp_small
where ps_partkey in (1,2,3));
select  ROUND(sum(l_extendedprice),2), 5373 as count,
136458704.22 as old_sum from lineitem where l_suppkey in
(select ps_suppkey from partsupp_small
where ps_partkey in (1,2,3));
ROUND(sum(l_extendedprice),2) count old_sum
136458704.22 5373 136458704.22
# LooseScan PS
# ============
prepare stmt from "
update  lineitem set l_extendedprice=l_extendedprice+? where l_suppkey in
(select ps_suppkey from partsupp_small
where ps_partkey in (1,2,3));
";
select  5373 as count, 136458704.22 as old_sum;
count old_sum
5373 136458704.22
set @a1=20;
execute stmt using @a1;
select ROUND(sum(l_extendedprice),2), 5373 as count,
(136458704.22+20*5373) as 'old_sum+20*count'
        from lineitem where l_suppkey in
(select ps_suppkey from partsupp_small
where ps_partkey in (1,2,3));
ROUND(sum(l_extendedprice),2) count old_sum+20*count
136566164.22 5373 136566164.22
set @a2=10;
execute stmt using @a2;
select ROUND(sum(l_extendedprice),2), 5373 as count,
(136458704.22+30*5373) as 'old_sum+30*count'
        from lineitem where l_suppkey in
(select ps_suppkey from partsupp_small
where ps_partkey in (1,2,3));
ROUND(sum(l_extendedprice),2) count old_sum+30*count
136619894.22 5373 136619894.22
execute stmt using -(@a1+@a2);
select  ROUND(sum(l_extendedprice),2), 5373 as count,
136458704.22 as old_sum from lineitem where l_suppkey in
(select ps_suppkey from partsupp_small
where ps_partkey in (1,2,3));
ROUND(sum(l_extendedprice),2) count old_sum
136458704.22 5373 136458704.22
deallocate prepare stmt;
# LooseScan SP
# ============
create procedure p(d int)
update  lineitem set l_extendedprice=l_extendedprice+d where l_suppkey in
(select ps_suppkey from partsupp_small
where ps_partkey in (1,2,3));
select  5373 as count, 136458704.22 as old_sum;
count old_sum
5373 136458704.22
call p(10);
select ROUND(sum(l_extendedprice),2), 5373 as count,
(136458704.22+10*5373) as 'old_sum+10*count'
        from lineitem where l_suppkey in
(select ps_suppkey from partsupp_small
where ps_partkey in (1,2,3));
ROUND(sum(l_extendedprice),2) count old_sum+10*count
136512434.22 5373 136512434.22
call p(20);
select ROUND(sum(l_extendedprice),2), 5373 as count,
(136458704.22+30*5373) as 'old_sum+30*count'
        from lineitem where l_suppkey in
(select ps_suppkey from partsupp_small
where ps_partkey in (1,2,3));
ROUND(sum(l_extendedprice),2) count old_sum+30*count
136619894.22 5373 136619894.22
call p(-(10+20));
select  ROUND(sum(l_extendedprice),2), 5373 as count,
136458704.22 as old_sum from lineitem where l_suppkey in
(select ps_suppkey from partsupp_small
where ps_partkey in (1,2,3));
ROUND(sum(l_extendedprice),2) count old_sum
136458704.22 5373 136458704.22
drop procedure p;
# DuplicateWeedout
# ================
set @tmp_optimizer_switch= @@optimizer_switch;
set optimizer_switch='materialization=off';
analyze table lineitem;
Table Op Msg_type Msg_text
dbt3_s001.lineitem analyze status Engine-independent statistics collected
dbt3_s001.lineitem analyze status OK
analyze table orders;
Table Op Msg_type Msg_text
dbt3_s001.orders analyze status Engine-independent statistics collected
dbt3_s001.orders analyze status OK
explain
select count(*) from lineitem where l_partkey in (
select ps_partkey
from partsupp_small join lineitem on ps_partkey=l_partkey
where ps_suppkey in (
select s_suppkey from supplier  where  s_suppkey < 2
)
);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY supplier range PRIMARY PRIMARY 4 NULL 1 Using where; Using index; Start temporary
1 PRIMARY partsupp_small ref PRIMARY,i_ps_partkey,i_ps_suppkey,i_ps_sup_part i_ps_sup_part 4 dbt3_s001.supplier.s_suppkey 17 Using where; Using index
1 PRIMARY lineitem ref i_l_suppkey_partkey,i_l_partkey i_l_suppkey_partkey 5 dbt3_s001.partsupp_small.ps_partkey 30 Using index
1 PRIMARY lineitem ref i_l_suppkey_partkey,i_l_partkey i_l_partkey 5 dbt3_s001.partsupp_small.ps_partkey 30 Using index; End temporary
explain format=json
select count(*) from lineitem where l_partkey in (
select ps_partkey
from partsupp_small join lineitem on ps_partkey=l_partkey
where ps_suppkey in (
select s_suppkey from supplier  where  s_suppkey < 2
)
);
EXPLAIN
{
  "query_block": {
    "select_id": 1,
    "cost": "COST_REPLACED",
    "nested_loop": [
      {
        "duplicates_removal": [
          {
            "table": {
              "table_name": "supplier",
              "access_type": "range",
              "possible_keys": ["PRIMARY"],
              "key": "PRIMARY",
              "key_length": "4",
              "used_key_parts": ["s_suppkey"],
              "loops": 1,
              "rows": 1,
              "cost": "COST_REPLACED",
              "filtered": 100,
              "attached_condition": "supplier.s_suppkey < 2",
              "using_index": true
            }
          },
          {
            "table": {
              "table_name": "partsupp_small",
              "access_type": "ref",
              "possible_keys": [
                "PRIMARY",
                "i_ps_partkey",
                "i_ps_suppkey",
                "i_ps_sup_part"
              ],
              "key": "i_ps_sup_part",
              "key_length": "4",
              "used_key_parts": ["ps_suppkey"],
              "ref": ["dbt3_s001.supplier.s_suppkey"],
              "loops": 1,
              "rows": 17,
              "cost": "COST_REPLACED",
              "filtered": 79.54545593,
              "attached_condition": "partsupp_small.ps_partkey is not null",
              "using_index": true
            }
          },
          {
            "table": {
              "table_name": "lineitem",
              "access_type": "ref",
              "possible_keys": ["i_l_suppkey_partkey", "i_l_partkey"],
              "key": "i_l_suppkey_partkey",
              "key_length": "5",
              "used_key_parts": ["l_partkey"],
              "ref": ["dbt3_s001.partsupp_small.ps_partkey"],
              "loops": 14,
              "rows": 30,
              "cost": "COST_REPLACED",
              "filtered": 100,
              "using_index": true
            }
          },
          {
            "table": {
              "table_name": "lineitem",
              "access_type": "ref",
              "possible_keys": ["i_l_suppkey_partkey", "i_l_partkey"],
              "key": "i_l_partkey",
              "key_length": "5",
              "used_key_parts": ["l_partkey"],
              "ref": ["dbt3_s001.partsupp_small.ps_partkey"],
              "loops": 420.35,
              "rows": 30,
              "cost": "COST_REPLACED",
              "filtered": 0.237896994,
              "using_index": true
            }
          }
        ]
      }
    ]
  }
}
select count(*) from lineitem where l_partkey in (
select ps_partkey
from partsupp_small join lineitem on ps_partkey=l_partkey
where ps_suppkey in (
select s_suppkey from supplier  where  s_suppkey < 2
)
);
count(*)
471
select  471 as count, 10751458.66 as old_sum;
count old_sum
471 10751458.66
explain
update  lineitem set l_extendedprice=l_extendedprice+10 where l_partkey in (
select ps_partkey
from partsupp_small join lineitem on ps_partkey=l_partkey
where ps_suppkey in (
select s_suppkey from supplier  where  s_suppkey < 2
)
);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY supplier range PRIMARY PRIMARY 4 NULL 1 Using where; Using index; Start temporary
1 PRIMARY partsupp_small ref PRIMARY,i_ps_partkey,i_ps_suppkey,i_ps_sup_part i_ps_sup_part 4 dbt3_s001.supplier.s_suppkey 17 Using where; Using index
1 PRIMARY lineitem ref i_l_suppkey_partkey,i_l_partkey i_l_suppkey_partkey 5 dbt3_s001.partsupp_small.ps_partkey 30 
1 PRIMARY lineitem ref i_l_suppkey_partkey,i_l_partkey i_l_partkey 5 dbt3_s001.partsupp_small.ps_partkey 30 Using index; End temporary
explain format=json
update  lineitem set l_extendedprice=l_extendedprice+10 where l_partkey in (
select ps_partkey
from partsupp_small join lineitem on ps_partkey=l_partkey
where ps_suppkey in (
select s_suppkey from supplier  where  s_suppkey < 2
)
);
EXPLAIN
{
  "query_block": {
    "select_id": 1,
    "cost": "COST_REPLACED",
    "nested_loop": [
      {
        "duplicates_removal": [
          {
            "table": {
              "table_name": "supplier",
              "access_type": "range",
              "possible_keys": ["PRIMARY"],
              "key": "PRIMARY",
              "key_length": "4",
              "used_key_parts": ["s_suppkey"],
              "loops": 1,
              "rows": 1,
              "cost": "COST_REPLACED",
              "filtered": 100,
              "attached_condition": "supplier.s_suppkey < 2",
              "using_index": true
            }
          },
          {
            "table": {
              "table_name": "partsupp_small",
              "access_type": "ref",
              "possible_keys": [
                "PRIMARY",
                "i_ps_partkey",
                "i_ps_suppkey",
                "i_ps_sup_part"
              ],
              "key": "i_ps_sup_part",
              "key_length": "4",
              "used_key_parts": ["ps_suppkey"],
              "ref": ["dbt3_s001.supplier.s_suppkey"],
              "loops": 1,
              "rows": 17,
              "cost": "COST_REPLACED",
              "filtered": 79.54545593,
              "attached_condition": "partsupp_small.ps_partkey is not null",
              "using_index": true
            }
          },
          {
            "table": {
              "table_name": "lineitem",
              "access_type": "ref",
              "possible_keys": ["i_l_suppkey_partkey", "i_l_partkey"],
              "key": "i_l_suppkey_partkey",
              "key_length": "5",
              "used_key_parts": ["l_partkey"],
              "ref": ["dbt3_s001.partsupp_small.ps_partkey"],
              "loops": 14,
              "rows": 30,
              "cost": "COST_REPLACED",
              "filtered": 100
            }
          },
          {
            "table": {
              "table_name": "lineitem",
              "access_type": "ref",
              "possible_keys": ["i_l_suppkey_partkey", "i_l_partkey"],
              "key": "i_l_partkey",
              "key_length": "5",
              "used_key_parts": ["l_partkey"],
              "ref": ["dbt3_s001.partsupp_small.ps_partkey"],
              "loops": 420.35,
              "rows": 30,
              "cost": "COST_REPLACED",
              "filtered": 0.237896994,
              "using_index": true
            }
          }
        ]
      }
    ]
  }
}
update  lineitem set l_extendedprice=l_extendedprice+10 where l_partkey in (
select ps_partkey
from partsupp_small join lineitem on ps_partkey=l_partkey
where ps_suppkey in (
select s_suppkey from supplier  where  s_suppkey < 2
)
);
select ROUND(sum(l_extendedprice),2), 471 as count,
(10751458.66+10*471) as 'old_sum+10*count'
        from lineitem where l_partkey in (
select ps_partkey
from partsupp_small join lineitem on ps_partkey=l_partkey
where ps_suppkey in (
select s_suppkey from supplier  where  s_suppkey < 2
)
);
ROUND(sum(l_extendedprice),2) count old_sum+10*count
10756168.66 471 10756168.66
update  lineitem set l_extendedprice=l_extendedprice-10 where l_partkey in (
select ps_partkey
from partsupp_small join lineitem on ps_partkey=l_partkey
where ps_suppkey in (
select s_suppkey from supplier  where  s_suppkey < 2
)
);
select  ROUND(sum(l_extendedprice),2), 471 as count,
10751458.66 as old_sum from lineitem where l_partkey in (
select ps_partkey
from partsupp_small join lineitem on ps_partkey=l_partkey
where ps_suppkey in (
select s_suppkey from supplier  where  s_suppkey < 2
)
);
ROUND(sum(l_extendedprice),2) count old_sum
10751458.66 471 10751458.66
# DuplicateWeedout PS
# ===================
prepare stmt from "
update  lineitem set l_extendedprice=l_extendedprice+? where l_partkey in (
select ps_partkey
from partsupp_small join lineitem on ps_partkey=l_partkey
where ps_suppkey in (
select s_suppkey from supplier  where  s_suppkey < 2
)
);
";
select  471 as count, 10751458.66 as old_sum;
count old_sum
471 10751458.66
set @a1=20;
execute stmt using @a1;
select ROUND(sum(l_extendedprice),2), 471 as count,
(10751458.66+20*471) as 'old_sum+20*count'
        from lineitem where l_partkey in (
select ps_partkey
from partsupp_small join lineitem on ps_partkey=l_partkey
where ps_suppkey in (
select s_suppkey from supplier  where  s_suppkey < 2
)
);
ROUND(sum(l_extendedprice),2) count old_sum+20*count
10760878.66 471 10760878.66
set @a2=10;
execute stmt using @a2;
select ROUND(sum(l_extendedprice),2), 471 as count,
(10751458.66+30*471) as 'old_sum+30*count'
        from lineitem where l_partkey in (
select ps_partkey
from partsupp_small join lineitem on ps_partkey=l_partkey
where ps_suppkey in (
select s_suppkey from supplier  where  s_suppkey < 2
)
);
ROUND(sum(l_extendedprice),2) count old_sum+30*count
10765588.66 471 10765588.66
execute stmt using -(@a1+@a2);
select  ROUND(sum(l_extendedprice),2), 471 as count,
10751458.66 as old_sum from lineitem where l_partkey in (
select ps_partkey
from partsupp_small join lineitem on ps_partkey=l_partkey
where ps_suppkey in (
select s_suppkey from supplier  where  s_suppkey < 2
)
);
ROUND(sum(l_extendedprice),2) count old_sum
10751458.66 471 10751458.66
deallocate prepare stmt;
# DuplicateWeedout SP
# ===================
create procedure p(d int)
update  lineitem set l_extendedprice=l_extendedprice+d where l_partkey in (
select ps_partkey
from partsupp_small join lineitem on ps_partkey=l_partkey
where ps_suppkey in (
select s_suppkey from supplier  where  s_suppkey < 2
)
);
select  471 as count, 10751458.66 as old_sum;
count old_sum
471 10751458.66
call p(10);
select ROUND(sum(l_extendedprice),2), 471 as count,
(10751458.66+10*471) as 'old_sum+10*count'
        from lineitem where l_partkey in (
select ps_partkey
from partsupp_small join lineitem on ps_partkey=l_partkey
where ps_suppkey in (
select s_suppkey from supplier  where  s_suppkey < 2
)
);
ROUND(sum(l_extendedprice),2) count old_sum+10*count
10756168.66 471 10756168.66
call p(20);
select ROUND(sum(l_extendedprice),2), 471 as count,
(10751458.66+30*471) as 'old_sum+30*count'
        from lineitem where l_partkey in (
select ps_partkey
from partsupp_small join lineitem on ps_partkey=l_partkey
where ps_suppkey in (
select s_suppkey from supplier  where  s_suppkey < 2
)
);
ROUND(sum(l_extendedprice),2) count old_sum+30*count
10765588.66 471 10765588.66
call p(-(10+20));
select  ROUND(sum(l_extendedprice),2), 471 as count,
10751458.66 as old_sum from lineitem where l_partkey in (
select ps_partkey
from partsupp_small join lineitem on ps_partkey=l_partkey
where ps_suppkey in (
select s_suppkey from supplier  where  s_suppkey < 2
)
);
ROUND(sum(l_extendedprice),2) count old_sum
10751458.66 471 10751458.66
drop procedure p;
set @@optimizer_switch=@tmp_optimizer_switch;
drop table partsupp_small;
DROP DATABASE dbt3_s001;

Messung V0.5 in Prozent
C=93 H=100 G=96

¤ Dauer der Verarbeitung: 0.199 Sekunden  (vorverarbeitet am  2026-10-08) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.