diff --git a/src/test/regress/input/parallel_indexonly_scan.source b/src/test/regress/input/parallel_indexonly_scan.source new file mode 100644 index 0000000000000000000000000000000000000000..af6007612ad4ed50bf526fa0635b556c5f4554ad --- /dev/null +++ b/src/test/regress/input/parallel_indexonly_scan.source @@ -0,0 +1,31 @@ +drop schema if exists test_parallel_indexonly_scan cascade; +create schema test_parallel_indexonly_scan; +set current_schema='test_parallel_indexonly_scan'; +-- create test table and indexonly +DROP TABLE IF EXISTS parallel_indexonly_01; +CREATE TABLE parallel_indexonly_01(a int); +INSERT INTO parallel_indexonly_01 VALUES (generate_series(1, 1000000)); +CREATE INDEX index_parallel_indexonly_01 ON parallel_indexonly_01(a); +SET enable_seqscan = OFF; +SET enable_bitmapscan = OFF; +SET enable_indexscan = OFF; +SET query_dop = 2; +-- encourage optimizer to choose parallel path +SET smp_thread_cost = 0; + +-- parallel indexonly scan in equality case +SELECT * FROM parallel_indexonly_01 WHERE a=100; +SELECT * FROM parallel_indexonly_01 WHERE a=100 AND a=10000; + +-- parallel indexonly scan in scope case +EXPLAIN (COSTS OFF) SELECT * FROM parallel_indexonly_01 WHERE a>10000 AND a<20000; +SELECT COUNT(a) FROM parallel_indexonly_01 WHERE a>10000 AND a<20000; +EXPLAIN (COSTS OFF) SELECT * FROM parallel_indexonly_01 WHERE a in (1000,10000,100000) ORDER BY a; +SELECT * FROM parallel_indexonly_01 WHERE a in (1000,10000,100000) ORDER BY a; + +--cleanup env +reset enable_seqscan; +reset enable_bitmapscan; +reset enable_indexscan; +reset query_dop; +reset smp_thread_cost; diff --git a/src/test/regress/output/parallel_indexonly_scan.source b/src/test/regress/output/parallel_indexonly_scan.source new file mode 100644 index 0000000000000000000000000000000000000000..56b0bf9ce103ed3c6a6fd693854c7c78dd0c00db --- /dev/null +++ b/src/test/regress/output/parallel_indexonly_scan.source @@ -0,0 +1,67 @@ +drop schema if exists test_parallel_indexonly_scan cascade; +NOTICE: schema "test_parallel_indexonly_scan" does not exist, skipping +create schema test_parallel_indexonly_scan; +set current_schema='test_parallel_indexonly_scan'; +-- create test table and indexonly +DROP TABLE IF EXISTS parallel_indexonly_01; +NOTICE: table "parallel_indexonly_01" does not exist, skipping +CREATE TABLE parallel_indexonly_01(a int); +INSERT INTO parallel_indexonly_01 VALUES (generate_series(1, 1000000)); +CREATE INDEX index_parallel_indexonly_01 ON parallel_indexonly_01(a); +SET enable_seqscan = OFF; +SET enable_bitmapscan = OFF; +SET enable_indexscan = OFF; +SET query_dop = 2; +-- encourage optimizer to choose parallel path +SET smp_thread_cost = 0; +-- parallel indexonly scan in equality case +SELECT * FROM parallel_indexonly_01 WHERE a=100; + a +----- + 100 +(1 row) + +SELECT * FROM parallel_indexonly_01 WHERE a=100 AND a=10000; + a +--- +(0 rows) + +-- parallel indexonly scan in scope case +EXPLAIN (COSTS OFF) SELECT * FROM parallel_indexonly_01 WHERE a>10000 AND a<20000; + QUERY PLAN +---------------------------------------------------------------------------------- + Streaming(type: LOCAL GATHER dop: 1/2) + -> Index Only Scan using index_parallel_indexonly_01 on parallel_indexonly_01 + Index Cond: ((a > 10000) AND (a < 20000)) +(3 rows) + +SELECT COUNT(a) FROM parallel_indexonly_01 WHERE a>10000 AND a<20000; + count +------- + 9999 +(1 row) + +EXPLAIN (COSTS OFF) SELECT * FROM parallel_indexonly_01 WHERE a in (1000,10000,100000) ORDER BY a; + QUERY PLAN +---------------------------------------------------------------------------------------- + Sort + Sort Key: a + -> Streaming(type: LOCAL GATHER dop: 1/2) + -> Index Only Scan using index_parallel_indexonly_01 on parallel_indexonly_01 + Index Cond: (a = ANY ('{1000,10000,100000}'::integer[])) +(5 rows) + +SELECT * FROM parallel_indexonly_01 WHERE a in (1000,10000,100000) ORDER BY a; + a +-------- + 1000 + 10000 + 100000 +(3 rows) + +--cleanup env +reset enable_seqscan; +reset enable_bitmapscan; +reset enable_indexscan; +reset query_dop; +reset smp_thread_cost;