The In-Memory Column Index (IMCI) for PolarDB for PostgreSQL Enterprise Edition can improve query performance by more than 50 times compared to the row store engine, while reducing storage consumption by up to 80%.
This topic walks through a TPC-H benchmark at the 100 GB scale factor to demonstrate these advantages, covering data preparation, index creation, query execution, and detailed results. In SQL syntax, you create an IMCI using the CSI (Column Store Index) index type: CREATE INDEX ... USING csi(...).
The TPC-H implementation in this topic is based on TPC-H benchmarking. These test results cannot be compared with published TPC-H benchmark results because the tests do not meet all TPC-H requirements.
Test description
The benchmark uses the following environment. The ECS instance serves as the client that generates data and submits queries to the PolarDB for PostgreSQL cluster.
Component | Specification |
ECS instance | 16-core 32 GB ( |
PolarDB for PostgreSQL cluster | 32-core 256 GB. Database engine: PostgreSQL 14 (minor engine version 14.10.20.0 or later). Edition: Enterprise Edition. Series: Dedicated. |
Make sure that the ECS instance and the PolarDB cluster are in the same virtual private cloud (VPC).
Benchmark methodology
TPC-H is a widely adopted decision-support benchmark developed by the Transaction Processing Performance Council (TPC). It evaluates the analytical capabilities of databases using a schema of 8 data tables and 22 complex SQL queries that involve operations such as single-table statistics, multi-table joins, subqueries, aggregations, and sorting.
This benchmark uses a 100 GB scale factor. All 22 queries are executed with EXPLAIN ANALYZE to capture execution plans and precise timing. The IMCI results are then compared against the same queries run on the standard PostgreSQL row store execution engine.
Data preparation
Step 1: Create the database
On the PolarDB for PostgreSQL cluster, create a privileged account and create the test database tpchdb.
Step 2: Generate TPC-H data
Log on to the ECS instance and prepare the test data.
Download the TPC-H tool dbgen.tar.gz, upload it to the ECS instance, and then decompress and compile it.
--- Decompress the package tar -zxvf dbgen.tar.gz --- Compile the code cd ./dbgen make -f makefile.suiteUse the TPC-H tool to generate 100 GB of test data. This operation takes about 30 minutes.
--- Change the directory to dbgen ./dbgen -s 100 -f
Step 3: Import data into PolarDB
On the ECS instance, use the database connection tool provided by PolarDB (PolarDB-Tools) to connect to your cluster and import the test data into the tpchdb database.
Confirm that you are in the
dbgendirectory. The expected output is/<installation_path>/dbgen.--- Confirm the current directory pwdUse PolarDB-Tools to connect to the cluster from the command line.
/u01/polardb_pg_tools/bin/psql -h <cluster_endpoint> -p <port_for_cluster_endpoint> -U <privileged_account> -d tpchdbImport the test data.
\i ./dss.ddl \copy part from ./part.tbl with delimiter as '|' NULL ''; \copy region from ./region.tbl with delimiter as '|' NULL ''; \copy nation from ./nation.tbl with delimiter as '|' NULL ''; \copy orders from ./orders.tbl with delimiter as '|' NULL ''; \copy customer from ./customer.tbl with delimiter as '|' NULL ''; \copy lineitem from ./lineitem.tbl with delimiter as '|' NULL ''; \copy partsupp from ./partsupp.tbl with delimiter as '|' NULL ''; \copy supplier from ./supplier.tbl with delimiter as '|' NULL '';
Enable IMCI and create columnstore indexes
Step 1: Enable IMCI
Based on the version of your PolarDB for PostgreSQL cluster, enable the columnstore index feature.
Step 2: Create indexes on all test tables
Create an IMCI on each of the 8 test tables. The following SQL statements add primary key constraints (required by IMCI) and then create the columnstore indexes using the csi index type.
--partsupp table
ALTER TABLE PARTSUPP ADD CONSTRAINT partsupp_pkey PRIMARY KEY (PS_PARTKEY, PS_SUPPKEY);
CREATE INDEX imps ON partsupp USING csi(ps_partkey, ps_suppkey, ps_availqty, ps_supplycost, ps_comment);
--part table
ALTER TABLE PART ADD CONSTRAINT part_kpey PRIMARY KEY (P_PARTKEY);
CREATE INDEX im_p ON part USING csi(p_partkey, p_name, p_mfgr, p_brand, p_type, p_size, p_container, p_retailprice, p_comment);
--supplier table
ALTER TABLE SUPPLIER ADD CONSTRAINT supplier_pkey PRIMARY KEY (S_SUPPKEY);
CREATE INDEX im_s ON supplier USING csi(s_suppkey, s_name, s_address, s_nationkey, s_phone, s_acctbal, s_comment);
--customer table
ALTER TABLE CUSTOMER ADD CONSTRAINT customer_pkey PRIMARY KEY (C_CUSTKEY);
CREATE INDEX im_c ON customer USING csi(c_custkey, c_name, c_address, c_nationkey, c_phone, c_acctbal, c_mktsegment, c_comment);
--orders table
ALTER TABLE ORDERS ADD CONSTRAINT orders_pkey PRIMARY KEY (O_ORDERKEY);
CREATE INDEX im_o ON orders USING csi(o_orderkey, o_custkey, o_orderstatus, o_totalprice, o_orderdate, o_orderpriority, o_clerk, o_shippriority, o_comment);
--lineitem table
ALTER TABLE LINEITEM ADD CONSTRAINT lineitem_pkey PRIMARY KEY (L_ORDERKEY, L_LINENUMBER);
CREATE INDEX im_l ON lineitem USING csi(l_orderkey, l_partkey, l_suppkey, l_linenumber, l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus, l_shipdate, l_commitdate, l_receiptdate, l_shipinstruct, l_shipmode, l_comment);
--nation table
ALTER TABLE NATION ADD CONSTRAINT nation_pkey PRIMARY KEY (N_NATIONKEY);
CREATE INDEX im_n ON nation USING csi(n_nationkey, n_name, n_regionkey, n_comment);
--region table
ALTER TABLE REGION ADD CONSTRAINT region_pkey PRIMARY KEY (R_REGIONKEY);
CREATE INDEX im_r ON region USING csi(r_regionkey, r_name, r_comment);Step 3: Configure IMCI query parameters
Set the following parameters before executing benchmark queries. For details about each parameter, see Parameters.
SET polar_csi.enable_pk TO ON;
SET polar_csi.enable_query TO ON;
SET polar_csi.exec_parallel TO 32;
SET polar_csi.cost_threshold TO 0;
SET polar_csi.memory_limit TO 65536;Execute benchmark queries
In your PolarDB for PostgreSQL cluster, execute all 22 TPC-H queries and record their execution times.
Enable timing to capture the total execution time of each SQL statement.
\timingExecute the following SQL statements in order.
Q1
EXPLAIN ANALYZE
SELECT
l_returnflag,
l_linestatus,
sum(l_quantity) as sum_qty,
sum(l_extendedprice) as sum_base_price,
sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
avg(l_quantity) as avg_qty,
avg(l_extendedprice) as avg_price,
avg(l_discount) as avg_disc,
count(*) as count_order
FROM
lineitem
WHERE l_shipdate <= date '1998-12-01' - '60 day'::interval
GROUP BY
l_returnflag,
l_linestatus
ORDER BY
l_returnflag,
l_linestatus;Q2
EXPLAIN ANALYZE
SELECT
s_acctbal,
s_name,
n_name,
p_partkey,
p_mfgr,
s_address,
s_phone,
s_comment
FROM
part,
supplier,
partsupp,
nation,
region
WHERE
p_partkey = ps_partkey
and s_suppkey = ps_suppkey
and p_size = 43
and p_type like '%NICKEL'
and s_nationkey = n_nationkey
and n_regionkey = r_regionkey
and r_name = 'MIDDLE EAST'
and ps_supplycost = (
SELECT
min(ps_supplycost)
FROM
partsupp,
supplier,
nation,
region
WHERE
p_partkey = ps_partkey
and s_suppkey = ps_suppkey
and s_nationkey = n_nationkey
and n_regionkey = r_regionkey
and r_name = 'MIDDLE EAST'
)
ORDER BY
s_acctbal desc,
n_name,
s_name,
p_partkey limit 100;Q3
EXPLAIN ANALYZE
SELECT
l_orderkey,
sum(l_extendedprice * (1 - l_discount)) as revenue,
o_orderdate,
o_shippriority
FROM
customer,
orders,
lineitem
WHERE
c_mktsegment = 'FURNITURE'
and c_custkey = o_custkey
and l_orderkey = o_orderkey
and o_orderdate < date '1995-03-05'
and l_shipdate > date '1995-03-05'
GROUP BY
l_orderkey,
o_orderdate,
o_shippriority
ORDER BY
revenue desc,
o_orderdate limit 100;Q4
EXPLAIN ANALYZE
SELECT
o_orderpriority,
count(*) as order_count
FROM
orders
WHERE
o_orderdate >= date '1993-05-01'
and o_orderdate < date '1993-05-01' + interval '3 month'::interval
and exists (
SELECT
*
FROM
lineitem
WHERE
l_orderkey = o_orderkey
and l_commitdate < l_receiptdate
)
GROUP BY
o_orderpriority
ORDER BY
o_orderpriority;Q5
EXPLAIN ANALYZE
SELECT
n_name,
sum(l_extendedprice * (1 - l_discount)) as revenue
FROM
customer,
orders,
lineitem,
supplier,
nation,
region
WHERE
c_custkey = o_custkey
and l_orderkey = o_orderkey
and l_suppkey = s_suppkey
and c_nationkey = s_nationkey
and s_nationkey = n_nationkey
and n_regionkey = r_regionkey
and r_name = 'MIDDLE EAST'
and o_orderdate >= date '1995-01-01'
and o_orderdate < date '1995-01-01' + '1 year'::interval
GROUP BY
n_name
ORDER BY
revenue desc;Q6
EXPLAIN ANALYZE
SELECT
sum(l_extendedprice * l_discount) as revenue
FROM
lineitem
WHERE
l_shipdate >= date '1993-01-01'
and l_shipdate < date '1993-01-01' + '1 year'::interval
and l_discount between 0.03 - 0.01 and 0.03 + 0.01
and l_quantity < 24;Q7
EXPLAIN ANALYZE
SELECT
supp_nation,
cust_nation,
l_year,
sum(volume) AS revenue
FROM (
SELECT
n1.n_name AS supp_nation,
n2.n_name AS cust_nation,
extract(year FROM l_shipdate) AS l_year,
l_extendedprice * (1 - l_discount) AS volume
FROM
supplier,
lineitem,
orders,
customer,
nation n1,
nation n2
WHERE
s_suppkey = l_suppkey
AND o_orderkey = l_orderkey
AND c_custkey = o_custkey
AND s_nationkey = n1.n_nationkey
AND c_nationkey = n2.n_nationkey
AND ((n1.n_name = 'FRANCE'
AND n2.n_name = 'GERMANY')
OR (n1.n_name = 'GERMANY'
AND n2.n_name = 'FRANCE'))
AND l_shipdate BETWEEN CAST('1995-01-01' AS date)
AND CAST('1996-12-31' AS date)) AS shipping
GROUP BY
supp_nation,
cust_nation,
l_year
ORDER BY
supp_nation,
cust_nation,
l_year;Q8
EXPLAIN ANALYZE
SELECT
o_year,
sum(case
when nation = 'INDONESIA' then volume
else 0
end) / sum(volume) as mkt_share
FROM
(
SELECT
extract(year from o_orderdate) as o_year,
l_extendedprice * (1 - l_discount) as volume,
n2.n_name as nation
FROM
part,
supplier,
lineitem,
orders,
customer,
nation n1,
nation n2,
region
WHERE
p_partkey = l_partkey
and s_suppkey = l_suppkey
and l_orderkey = o_orderkey
and o_custkey = c_custkey
and c_nationkey = n1.n_nationkey
and n1.n_regionkey = r_regionkey
and r_name = 'ASIA'
and s_nationkey = n2.n_nationkey
and o_orderdate between '1995-01-01'::date and '1996-12-31'::date
and p_type = 'PROMO POLISHED NICKEL'
) as all_nations
GROUP BY
o_year
ORDER BY
o_year;Q9
EXPLAIN ANALYZE
SELECT
nation,
o_year,
sum(amount) as sum_profit
FROM
(
SELECT
n_name as nation,
extract(year from o_orderdate) as o_year,
l_extendedprice * (1 - l_discount) - ps_supplycost * l_quantity as amount
FROM
part,
supplier,
lineitem,
partsupp,
orders,
nation
WHERE
s_suppkey = l_suppkey
and ps_suppkey = l_suppkey
and ps_partkey = l_partkey
and p_partkey = l_partkey
and o_orderkey = l_orderkey
and s_nationkey = n_nationkey
and p_name like '%navajo%'
) as profit
GROUP BY
nation,
o_year
ORDER BY
nation,
o_year desc limit 100;Q10
EXPLAIN ANALYZE
SELECT
c_custkey,
c_name,
sum(l_extendedprice * (1 - l_discount)) as revenue,
c_acctbal,
n_name,
c_address,
c_phone,
c_comment
FROM
customer,
orders,
lineitem,
nation
WHERE
c_custkey = o_custkey
and l_orderkey = o_orderkey
and o_orderdate >= date '1993-08-01'
and o_orderdate < date '1993-08-01' + '3 month'::interval
and l_returnflag = 'R'
and c_nationkey = n_nationkey
GROUP BY
c_custkey,
c_name,
c_acctbal,
c_phone,
n_name,
c_address,
c_comment
ORDER BY
revenue desc
LIMIT 20;Q11
EXPLAIN ANALYZE
SELECT
ps_partkey,
sum(ps_supplycost * ps_availqty) as value
FROM
partsupp,
supplier,
nation
WHERE
ps_suppkey = s_suppkey
and s_nationkey = n_nationkey
and n_name = 'ALGERIA'
GROUP BY
ps_partkey having
sum(ps_supplycost * ps_availqty) > (
SELECT
sum(ps_supplycost * ps_availqty) * 0.0001000000
FROM
partsupp,
supplier,
nation
WHERE
ps_suppkey = s_suppkey
and s_nationkey = n_nationkey
and n_name = 'ALGERIA'
)
ORDER BY
value desc;Q12
EXPLAIN ANALYZE
SELECT
l_shipmode,
sum(case
when o_orderpriority = '1-URGENT'
or o_orderpriority = '2-HIGH'
then 1
else 0
end) as high_line_count,
sum(case
when o_orderpriority <> '1-URGENT'
and o_orderpriority <> '2-HIGH'
then 1
else 0
end) as low_line_count
FROM
orders,
lineitem
WHERE
o_orderkey = l_orderkey
and l_shipmode in ('AIR', 'FOB')
and l_commitdate < l_receiptdate
and l_shipdate < l_commitdate
and l_receiptdate >= date '1996-01-01'
and l_receiptdate < date '1996-01-01' + '1 year'::interval
GROUP BY
l_shipmode
ORDER BY
l_shipmode;Q13
EXPLAIN ANALYZE
SELECT
c_count,
count(*) as custdist
FROM
(
SELECT
c_custkey,
count(o_orderkey)
FROM
customer left outer join orders on
c_custkey = o_custkey
and o_comment not like '%pending%requests%'
GROUP BY
c_custkey
) as c_orders (c_custkey, c_count)
GROUP BY
c_count
ORDER BY
custdist desc,
c_count desc;Q14
EXPLAIN ANALYZE
SELECT
100.00 * sum(case
when p_type like 'PROMO%'
then l_extendedprice * (1 - l_discount)
else 0
end) / sum(l_extendedprice * (1 - l_discount)) as promo_revenue
FROM
lineitem,
part
WHERE
l_partkey = p_partkey
and l_shipdate >= date '1995-02-01'
and l_shipdate < date '1995-02-01' + interval '1 month'::interval;Q15
EXPLAIN ANALYZE
WITH revenue0 as (
SELECT
l_suppkey as supplier_no,
sum(l_extendedprice * (1 - l_discount)) as total_revenue
FROM
lineitem
WHERE
l_shipdate >= date '1995-08-01'
and l_shipdate < date '1995-08-01' + '3 month'::interval
GROUP BY
l_suppkey)
SELECT
s_suppkey,
s_name,
s_address,
s_phone,
total_revenue
FROM
supplier,
revenue0
WHERE
s_suppkey = supplier_no
and total_revenue = (
SELECT
max(total_revenue)
FROM
revenue0
)
ORDER BY
s_suppkey;Q16
EXPLAIN ANALYZE
SELECT
p_brand,
p_type,
p_size,
count(distinct ps_suppkey) as supplier_cnt
FROM
partsupp,
part
WHERE
p_partkey = ps_partkey
and p_brand <> 'Brand#13'
and p_type not like 'ECONOMY BRUSHED%'
and p_size in (11, 8, 10, 31, 21, 13, 32, 28)
and ps_suppkey not in (
SELECT
s_suppkey
FROM
supplier
WHERE
s_comment like '%Customer%Complaints%'
)
GROUP BY
p_brand,
p_type,
p_size
ORDER BY
supplier_cnt desc,
p_brand,
p_type,
p_size limit 100;Q17
EXPLAIN ANALYZE
SELECT
sum(l_extendedprice) / 7.0 as avg_yearly
FROM
lineitem,
part
where
p_partkey = l_partkey
and p_brand = 'Brand#44'
and p_container = 'MED PKG'
and l_quantity < (
SELECT
0.2 * avg(l_quantity)
FROM
lineitem
WHERE
l_partkey = p_partkey
);Q18
EXPLAIN ANALYZE
SELECT
c_name,
c_custkey,
o_orderkey,
o_orderdate,
o_totalprice,
sum(l_quantity)
FROM
customer,
orders,
lineitem
WHERE
o_orderkey in (
SELECT
l_orderkey
FROM
lineitem
GROUP BY
l_orderkey having
sum(l_quantity) > 313
)
and c_custkey = o_custkey
and o_orderkey = l_orderkey
GROUP BY
c_name,
c_custkey,
o_orderkey,
o_orderdate,
o_totalprice
ORDER BY
o_totalprice desc,
o_orderdate limit 100;
--LIMIT 100Q19
EXPLAIN ANALYZE
SELECT
sum(l_extendedprice* (1 - l_discount)) as revenue
FROM
lineitem,
part
WHERE
(
p_partkey = l_partkey
and p_brand = 'Brand#15'
and p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG')
and l_quantity >= 10 and l_quantity <= 10 + 10
and p_size between 1 and 5
and l_shipmode in ('AIR', 'AIR REG')
and l_shipinstruct = 'DELIVER IN PERSON'
)
or
(
p_partkey = l_partkey
and p_brand = 'Brand#45'
and p_container in ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK')
and l_quantity >= 18 and l_quantity <= 18 + 10
and p_size between 1 and 10
and l_shipmode in ('AIR', 'AIR REG')
and l_shipinstruct = 'DELIVER IN PERSON'
)
or
(
p_partkey = l_partkey
and p_brand = 'Brand#21'
and p_container in ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG')
and l_quantity >= 30 and l_quantity <= 30 + 10
and p_size between 1 and 15
and l_shipmode in ('AIR', 'AIR REG')
and l_shipinstruct = 'DELIVER IN PERSON'
);
--LIMIT -1Q20
EXPLAIN ANALYZE
SELECT
s_name,
s_address
FROM
supplier,
nation
WHERE
s_suppkey in (
SELECT
ps_suppkey
FROM
partsupp
WHERE
ps_partkey in (
SELECT
p_partkey
FROM
part
WHERE
p_name like 'lemon%'
)
AND ps_availqty > (
SELECT
0.5 * sum(l_quantity)
FROM
lineitem
WHERE
l_partkey = ps_partkey
and l_suppkey = ps_suppkey
and l_shipdate >= date '1997-01-01'
and l_shipdate < date '1997-01-01' + '1 year'::interval
)
)
and s_nationkey = n_nationkey
and n_name = 'INDONESIA'
ORDER BY
s_name limit 100;Q21
EXPLAIN ANALYZE
SELECT
s_name,
count(*) as numwait
FROM
supplier,
lineitem l1,
orders,
nation
WHERE
s_suppkey = l1.l_suppkey
and o_orderkey = l1.l_orderkey
and o_orderstatus = 'F'
and l1.l_receiptdate > l1.l_commitdate
and exists (
SELECT
*
FROM
lineitem l2
WHERE
l2.l_orderkey = l1.l_orderkey
and l2.l_suppkey <> l1.l_suppkey
)
and not exists (
SELECT
*
FROM
lineitem l3
WHERE
l3.l_orderkey = l1.l_orderkey
and l3.l_suppkey <> l1.l_suppkey
and l3.l_receiptdate > l3.l_commitdate
)
and s_nationkey = n_nationkey
and n_name = 'INDIA'
GROUP BY
s_name
ORDER BY
numwait desc,
s_name limit 100;
--LIMIT 100Q22
EXPLAIN ANALYZE
SELECT
cntrycode,
count(*) as numcust,
sum(c_acctbal) as totacctbal
FROM
(
SELECT
substring(c_phone from 1 for 2) as cntrycode,
c_acctbal
FROM
customer
WHERE
substring(c_phone from 1 for 2) in
('16', '17', '24', '21', '19', '22', '15')
and c_acctbal > (
SELECT
avg(c_acctbal)
FROM
customer
WHERE
c_acctbal > 0.00
and substring(c_phone from 1 for 2) in
('16', '17', '24', '21', '19', '22', '15')
)
and not exists (
SELECT
*
FROM
orders
WHERE
o_custkey = c_custkey
)
) as custsale
GROUP BY
cntrycode
ORDER BY
cntrycode;
--LIMIT -1Test results
Query performance
It can improve query performance by more than 50 times compared to the row store engine. In this benchmark, the 22 TPC-H queries completed in a total of 23.92 seconds with IMCI, compared to 2,363.7 seconds on the row store execution engine -- an overall speedup of 98.82x.
The following table shows the per-query breakdown. Q15 timed out on the row store and is calculated as 500 seconds.
Query | IMCI (seconds) | Row store (seconds) | Speedup |
Q1 | 0.98 | 41.629 | 42.48x |
Q2 | 0.23 | 78.402 | 340.88x |
Q3 | 0.88 | 18.376 | 20.88x |
Q4 | 0.78 | 3.929 | 5.04x |
Q5 | 0.89 | 14.801 | 16.63x |
Q6 | 0.27 | 4.782 | 17.71x |
Q7 | 0.86 | 17.661 | 20.54x |
Q8 | 0.71 | 21.952 | 30.92x |
Q9 | 3.77 | 362.42 | 96.13x |
Q10 | 1.41 | 18.313 | 12.99x |
Q11 | 0.15 | 8.307 | 55.38x |
Q12 | 0.61 | 7.146 | 11.71x |
Q13 | 2.31 | 308.555 | 133.57x |
Q14 | 0.67 | 10.658 | 15.91x |
Q15 | 0.44 | Timed out, calculated as 500 | 1136.36x |
Q16 | 0.44 | 71.062 | 161.50x |
Q17 | 0.84 | 288 | 342.86x |
Q18 | 2.58 | 473.446 | 183.51x |
Q19 | 1.42 | 0.416 | 0.29x |
Q20 | 0.54 | 83 | 153.70x |
Q21 | 2.68 | 17.387 | 6.49x |
Q22 | 0.46 | 13.458 | 29.26x |
Total | 23.92 | 2,363.7 | 98.82x |

Storage efficiency
IMCI uses columnar compression to significantly reduce storage requirements compared to the heap table in the row store.
Row store (heap table): 126 GB
IMCI (PK disabled): 25 GB -- 20% of the row store size. This mode is suitable for creating an IMCI on static data.
IMCI (PK enabled): 53 GB -- 42% of the row store size. This mode is suitable for creating an IMCI on dynamic data.
The parameter polar_csi.enable_pk controls whether the primary key is included in the columnstore index. See the per-table breakdown below.
Table | Rows | Row store | IMCI (PK disabled) | IMCI (PK enabled) |
LINEITEM | 600,037,902 | 86 GB | 17 GB | 36 GB |
ORDERS | 150,000,000 | 20 GB | 4406 MB | 9052 MB |
PARTSUPP | 80,000,000 | 13 GB | 3452 MB | 6689 MB |
PART | 20,000,000 | 3204 MB | 487 MB | 634 MB |
CUSTOMER | 15,000,000 | 2808 MB | 992 MB | 1108 MB |
SUPPLIER | 1,000,000 | 176 MB | 63 MB | 72 MB |
NATION | 25 | 8 KB | 528 KB | 528 KB |
REGION | 5 | 8 KB | 528 KB | 528 KB |
Total | 866,037,932 | 126 GB | 25 GB | 53 GB |
Index creation time
Single-threaded serial creation of the IMCI across all 8 tables takes a total of 39 minutes.