From 9765503642c96b6d184635044183d6e6ffab7bcc Mon Sep 17 00:00:00 2001 From: mnoskov Date: Tue, 31 Mar 2026 12:26:02 +0300 Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B0=D0=B4=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=D0=BC=D0=B8?= =?UTF-8?q?=20"=D0=BF=D1=80=D0=B0=D0=BA=D1=82=D0=B8=D0=BA=D0=B0=20'=D0=9F?= =?UTF-8?q?=D0=B0=D1=80=D1=82=D0=B8=D1=86=D0=B8=D0=B8'"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2. Партиции/practice_partitions.sql | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/mnoskov/Теория БД/1. Ускорение и масштабирование/2. Партиции/practice_partitions.sql b/mnoskov/Теория БД/1. Ускорение и масштабирование/2. Партиции/practice_partitions.sql index 5445669..fa096dc 100644 --- a/mnoskov/Теория БД/1. Ускорение и масштабирование/2. Партиции/practice_partitions.sql +++ b/mnoskov/Теория БД/1. Ускорение и масштабирование/2. Партиции/practice_partitions.sql @@ -2,9 +2,8 @@ 1) * range по полю order_date * запросы с 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' - 3. where order_date < '2026-01-01' and order_date > '2025-01-01' 2) * тут два типа партиционирования подходят. range по created_at или list по country. * если выбирать list по country то плюс - это при фильтрах по стране будут отсекаться лишние партиции, а минус, что год/месяц регистрации не будет разделен по партициям. @@ -34,13 +33,13 @@ CREATE TABLE orders_part ( ) PARTITION BY RANGE (order_date); 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 -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 -FOR VALUES FROM ('2026_01-01') TO ('2027-01-01'); +FOR VALUES FROM ('2026-01-01') TO ('2027-01-01'); -- сделал insert который попросил сгенерировать нейронку @@ -107,7 +106,7 @@ SELECT FROM users_part WHERE - country = 'RU' + country = 'RU'; -- запрос скаинровал только партицию users_ru EXPLAIN ANALYZE @@ -116,7 +115,7 @@ SELECT FROM users_part WHERE - country IN ('RU', 'KZ') + country IN ('RU', 'KZ'); -- запрос сканировал только партиции users_ru и users_kz EXPLAIN ANALYZE @@ -138,7 +137,7 @@ CREATE TABLE user_logs_part ( event_type text NOT NULL, payload jsonb, 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 FOR VALUES WITH (modulus 4, remainder 0);