File size: 1,616 Bytes
dedf5cd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
-- Task 1: Index Optimization
--
-- Creates a 120K-row orders table with deterministic content (no random()
-- so reseeds give reproducible plans). The table has no user indexes —
-- only the implicit primary key. We then force 250 deterministic 'pending'
-- rows for customer_id=12345 so the slow target query has predictable
-- selectivity.
--
-- Run inside a fresh task_schema (the env drops it on every reset).

SET search_path TO task_schema, public;

CREATE TABLE IF NOT EXISTS orders (
    id          BIGSERIAL PRIMARY KEY,
    customer_id INTEGER     NOT NULL,
    order_date  TIMESTAMPTZ NOT NULL,
    status      TEXT        NOT NULL,
    amount      NUMERIC(10, 2) NOT NULL,
    region      TEXT        NOT NULL
);

INSERT INTO orders (customer_id, order_date, status, amount, region)
SELECT
    ((i * 2654435761) % 50000) + 1                                       AS customer_id,
    NOW() - ((i % 8760) * INTERVAL '1 hour')                             AS order_date,
    (ARRAY['pending','shipped','delivered','cancelled'])[1 + (i % 4)]    AS status,
    (((i * 13) % 100000) / 100.0)::NUMERIC(10,2)                         AS amount,
    (ARRAY['us-east','us-west','eu','apac'])[1 + (i % 4)]                AS region
FROM generate_series(1, 120000) AS gs(i);

-- Force 250 deterministic 'pending' rows for customer_id=12345 so the
-- target query is non-trivial but predictable.
INSERT INTO orders (customer_id, order_date, status, amount, region)
SELECT
    12345,
    NOW() - (i * INTERVAL '1 hour'),
    'pending',
    50.00,
    'us-east'
FROM generate_series(1, 250) AS gs(i);

ANALYZE orders;