PARTITION в Oracle SQL — как использовать разбиение данных

🟢 PARTITION в Oracle SQL. Введение

PARTITION в Oracle SQL — это мощный инструмент, позволяющий разбивать таблицы, индексы или результаты аналитических функций на логические фрагменты. Он помогает обрабатывать большие объёмы данных быстрее и точнее, а также строить продвинутую аналитику.

В Oracle есть два основных контекста использования:

  • Разбиение таблиц (partitioned tables)

  • PARTITION BY в аналитических функциях


🔤 Написание

В аналитических функциях:

sql
<функция> OVER (PARTITION BY столбец ORDER BY столбец)

В таблицах:

sql
CREATE TABLE имя (
...
)
PARTITION BY RANGE (столбец) (
PARTITION имя1 VALUES LESS THAN (...),
PARTITION имя2 VALUES LESS THAN (...)
);

🔄 Где используется

  • Ускорение запросов к большим таблицам

  • Построение оконных функций (RANK, SUM, AVG и др.)

  • Создание отчётов по группам

  • Разделение таблиц по дате, региону, пользователю

  • Управление и архивирование данных по частям


🧪 10 Примеров использования PARTITION

1️⃣ Аналитическая функция с PARTITION BY

sql
SELECT department_id, employee_id, salary,
RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS ранжирование
FROM employees;

2️⃣ Сумма по отделу

sql
SELECT department_id, employee_id, salary,
SUM(salary) OVER (PARTITION BY department_id) AS сумма_по_отделу
FROM employees;

3️⃣ Среднее по дате

sql
SELECT order_date, product_id, quantity,
AVG(quantity) OVER (PARTITION BY order_date) AS ср_по_дате
FROM orders;

4️⃣ Ранжирование продаж по регионам

sql
SELECT region, store_id, sales,
DENSE_RANK() OVER (PARTITION BY region ORDER BY sales DESC) AS позиция
FROM sales_data;

5️⃣ Создание таблицы с RANGE-разбиением

sql
CREATE TABLE orders_partitioned (
order_id NUMBER,
order_date DATE
)
PARTITION BY RANGE (order_date) (
PARTITION q1 VALUES LESS THAN (TO_DATE('2024-04-01','YYYY-MM-DD')),
PARTITION q2 VALUES LESS THAN (TO_DATE('2024-07-01','YYYY-MM-DD'))
);

6️⃣ Проверка, в каком разделе данные

sql
SELECT table_name, partition_name
FROM user_tab_partitions
WHERE table_name = 'ORDERS_PARTITIONED';

7️⃣ PARTITION BY в оконной функции с условием

sql
SELECT customer_id, order_id, amount,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY amount DESC) AS номер
FROM orders;

8️⃣ Удаление одного раздела таблицы

sql
ALTER TABLE orders_partitioned DROP PARTITION q1;

9️⃣ Добавление раздела в таблицу

sql
ALTER TABLE orders_partitioned
ADD PARTITION q3 VALUES LESS THAN (TO_DATE('2024-10-01','YYYY-MM-DD'));

🔟 COUNT с PARTITION BY

sql
SELECT department_id, employee_id,
COUNT(*) OVER (PARTITION BY department_id) AS сотрудников_в_отделе
FROM employees;

🧩 Заключение

PARTITION — это важнейший инструмент в Oracle SQL для масштабируемости и аналитики. Он позволяет управлять большими объёмами данных, повышать читаемость отчётов и строить сложные вычисления по группам.

💡 Запомни:

  • PARTITION BY группирует данные внутри аналитических функций

  • Таблицы можно физически разбивать на разделы для ускорения

  • Улучшает производительность и читабельность

  • Особенно полезен в BI, аналитике, отчётности


🔜 Следующая статья:

OUT в Oracle SQL — как передавать значения из процедур и получать результаты


 

Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии