работа над ошибками "практика 'Партиции'"

This commit is contained in:
mnoskov
2026-03-31 12:26:02 +03:00
parent 176001d33c
commit 9765503642
@@ -2,9 +2,8 @@
1) 1)
* range по полю order_date * range по полю order_date
* запросы с between в год * запросы с between в год
1. where order_date between '2022-01-01' and '2023-01-01' 1. where order_date >= '2022-01-01' and order_date < '2023-01-01'
2. where extract('year' from order_date) = '2025' 2. where extract('year' from order_date) = '2025'
3. where order_date < '2026-01-01' and order_date > '2025-01-01'
2) 2)
* тут два типа партиционирования подходят. range по created_at или list по country. * тут два типа партиционирования подходят. range по created_at или list по country.
* если выбирать list по country то плюс - это при фильтрах по стране будут отсекаться лишние партиции, а минус, что год/месяц регистрации не будет разделен по партициям. * если выбирать list по country то плюс - это при фильтрах по стране будут отсекаться лишние партиции, а минус, что год/месяц регистрации не будет разделен по партициям.
@@ -34,13 +33,13 @@ CREATE TABLE orders_part (
) PARTITION BY RANGE (order_date); ) PARTITION BY RANGE (order_date);
CREATE TABLE orders_2024 PARTITION OF orders_part CREATE TABLE orders_2024 PARTITION OF orders_part
FOR VALUES FROM ('2024_01-01') TO ('2025-01-01'); FOR VALUES FROM ('2024-01-01') TO ('2025-01-01');
CREATE TABLE orders_2025 PARTITION OF orders_part CREATE TABLE orders_2025 PARTITION OF orders_part
FOR VALUES FROM ('2025_01-01') TO ('2026-01-01'); FOR VALUES FROM ('2025-01-01') TO ('2026-01-01');
CREATE TABLE orders_2026 PARTITION OF orders_part CREATE TABLE orders_2026 PARTITION OF orders_part
FOR VALUES FROM ('2026_01-01') TO ('2027-01-01'); FOR VALUES FROM ('2026-01-01') TO ('2027-01-01');
-- сделал insert который попросил сгенерировать нейронку -- сделал insert который попросил сгенерировать нейронку
@@ -107,7 +106,7 @@ SELECT
FROM FROM
users_part users_part
WHERE WHERE
country = 'RU' country = 'RU';
-- запрос скаинровал только партицию users_ru -- запрос скаинровал только партицию users_ru
EXPLAIN ANALYZE EXPLAIN ANALYZE
@@ -116,7 +115,7 @@ SELECT
FROM FROM
users_part users_part
WHERE WHERE
country IN ('RU', 'KZ') country IN ('RU', 'KZ');
-- запрос сканировал только партиции users_ru и users_kz -- запрос сканировал только партиции users_ru и users_kz
EXPLAIN ANALYZE EXPLAIN ANALYZE
@@ -138,7 +137,7 @@ CREATE TABLE user_logs_part (
event_type text NOT NULL, event_type text NOT NULL,
payload jsonb, payload jsonb,
PRIMARY KEY (id, user_id) PRIMARY KEY (id, user_id)
) PARTITION BY hash (user_id) ) PARTITION BY hash (user_id);
CREATE TABLE user_logs_p1 PARTITION OF user_logs_part CREATE TABLE user_logs_p1 PARTITION OF user_logs_part
FOR VALUES WITH (modulus 4, remainder 0); FOR VALUES WITH (modulus 4, remainder 0);