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);