blob: 5e57de826cd551fcd2a1ca38c4f7536648d2310a [file]
-- Two small integer tables for the projected IN / EXISTS subquery benchmarks.
--
-- `outer_t.id` is dense on 1..PSQ_ROWS and `inner_t.id` is the even numbers,
-- so about half of the outer keys have a match. Every 97th inner key is NULL,
-- which keeps three-valued logic in play: a projected `IN` must return NULL,
-- not false, when there is no match and the inner side holds a NULL. That is
-- the reason the decorrelation needs more than one mark join.
--
-- `z` is a low-cardinality column (1000 groups) used by the correlated
-- queries, once with an equality correlation and once with a `<` correlation.
--
-- The tables are deliberately small. The plans under test are quadratic in
-- outer rows times inner rows, so a larger PSQ_ROWS makes the suite take
-- minutes per query instead of seconds.
CREATE TABLE outer_t AS
SELECT
CAST(value AS INT) AS id,
CAST(value % 1000 AS INT) AS z
FROM generate_series(1, ${PSQ_ROWS:-30000});
CREATE TABLE inner_t AS
SELECT
CASE WHEN value % 97 = 0 THEN NULL ELSE CAST(value * 2 AS INT) END AS id,
CAST(value % 1000 AS INT) AS z
FROM generate_series(1, ${PSQ_ROWS:-30000});