postgres_dba_gym / sql /seed_index_optimization.sql
charanx's picture
Upload folder using huggingface_hub
dedf5cd verified
Raw
History Blame Contribute Delete
1.62 kB
-- 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;