В таблице Payments есть высокоселективный составной индекс ind1 на столбцы (ID_CLIENT, DATE_PAYMENT). Есть два запроса:
1) select sum(AMOUNT) sum_amount, count(*) count_payments from Payments where ID_CLIENT = 33278 and DATE_PAYMENT = date '2026-02-11';
2) select sum(AMOUNT) sum_amount, count(*) count_payments from Payments where DATE_PAYMENT = date '2026-02-11' and ID_CLIENT = 33278.
Выберите правильное утверждение:
1 · 652 · Опрос
нажмите — покажем
759 · нажмите — покажем
Друзья, всем привет!
На следующей неделе планирую провести онлайн-интенсив по параллельной обработке данных в ORACLE.
Ещё есть места! Буду рад, если присоединитесь!
Мы научимся:
- эффективной многопоточной обработке данных;
- пользоваться функционалом стандартного пакета DBMS_PARALLEL_EXECUTE;
- организовывать расчет и быструю многопоточную загрузку данных в общую таблицу (без блокировок и ожиданий на чтение блоков данных);
- применять сжатие данных в таблицах (этой информации очень мало в официальных источниках ORACLE, делюсь опытом разработчиков);
- замерять использование ОЗУ, свопа и логов redo (их рост и своп);
- настраивать режимы LOGGING/NOLOGGING для таблиц и индексов;
- и расскажу про партиционирование таблиц и метод EXCHANGE.
Трехдневный интенсив на следующей неделе проведу в пн, ср и пт (19:00 - 20:00). Всего три онлайн встречи по часу примерно.
На интенсиве будем не только разбираться с возможностями ORACLE, но и все три урока делать проект по многопоточной агрегации большого объема данных.
Стоимость 3.800 р. Обучаться будем через Zoom и уроки буду записывать (Вы сможете использовать записи для повторения материала). Ещё с меня поддержка и ответы на все вопросы!
Записаться и оплатить участие
845 · Методом Exchange Partition можно встроить целую таблицу в качестве партиции другой таблицы. То есть целая таблица А может стать частью большой таблицы Б.
Встраиваемая таблица должна иметь такой же набор столбцов с совместимыми типами данных и характеристиками. При этом она не обязательно должна находиться в том же табличном пространстве.
⚡️ Exchange Partition не перемещает сами данные. СУБД фактически меняет местами сегмент таблицы и сегмент партиции, поэтому операция выполняется практически мгновенно даже для таблиц с десятками миллионов строк.
📊 Перед встраиванием таблицы желательно обновить её статистику. В Oracle это можно сделать с помощью DBMS_STATS.GATHER_TABLE_STATS. Статистика нужна оптимизатору, чтобы понимать объём данных и их распределение и на основании этого выбирать оптимальный план выполнения запросов.
🔗 Если на целевой таблице используются локальные индексы, то для успешного Exchange Partition на встраиваемой таблице должны быть соответствующие совместимые индексы.
Exchange Partition очень удобно использовать для быстрой загрузки больших объёмов данных в партиционированные таблицы.
1 · 751 · Опрос
нажмите — покажем
802 · нажмите — покажем
Быстрый способ заполнить коллекцию данными, полученными из SQL-запроса, — использовать BULK COLLECT.
Например:
declare
type t_customer_list is table of number;
l_customer_list t_customer_list := t_customer_list();
begin
select distinct i.customer_id
bulk collect
into l_customer_list
from ipdr i
where i.start_time >= date '2026-01-01'
and i.end_time < date '2026-02-01';
end;
В результате все полученные CUSTOMER_ID будут загружены в коллекцию l_customer_list.
3 · 740 · Всем привет!
Как насчет очередной задачки по SQL? 😎
В таблице rate_periods есть данные вида:
id date_from date_to rate
1 09.02.2026 12.02.2026 4.1
2 13.02.2026 19.02.2026 4.1
3 20.02.2026 23.02.2026 4.2
4 24.02.2026 04.03.2026 4.3
5 05.03.2026 11.03.2026 4.31
6 15.03.2026 16.03.2026 4.31
7 17.03.2026 22.03.2026 4.31
8 23.03.2026 25.03.2026 4.31
Требуется написать запрос, который вывел бы периоды и действующие тарифы в этих периодах. Запрашиваются столбцы date_from, date_to и rate. Подряд идущие периоды (следующий период начинается сразу со следующего дня после окончания предыдущего периода) с одинаковым тарифом требуется объединить в один. В примере выше строки 1 и 2 должны объединиться в одну. Date_from общей строки будет 09.02.2026, а Date_to 19.02.2026. Также строки 6, 7 и 8 тоже должны объединиться в одну строку.
1 · 633 · При выполнении SQL запроса из некоторой таблицы, оптимизатор может знать об индексе, который мог бы быть использован, но не использовать его. Если индекс указывает на большую часть строк таблицы (например, на треть или половину строк таблицы), обращение к индексу может оказаться менее эффективным, чем полное сканирование таблицы.
Поэтому наличие индекса ещё не гарантирует его использование. 😉 Оптимизатор сравнивает разные варианты выполнения запроса и выбирает тот, который, по его расчётам, будет наиболее быстрым.
559 · В таблице справочнике товаров добавили новый столбец current_amount для хранения текущего количества товаров. Теперь отбирать товары с остатками стало проще. Раньше требовалось по каждому товару суммировать все приходы и отнимать все расходы.
509 · Опрос
нажмите — покажем
529 · нажмите — покажем
Ilia Khokhlov 👨💻Всем привет!
Как насчет очередной задачки по SQL? 😎
В таблице rate_periods есть данные вида:
id date_from date_to rate
1 09.02.2026 12.02.2026 4.1
2 13.02.2026 19.02.2026 4.1
3 20.02.2026 23.02.2026 4.2
4 24.02.2026 04.03.2026 4.3
5 05.03.2026 11.03.2026
Ссылка
нажмите — покажем
нажмите — покажем
Эту и другие интересные задачи порешаем на нашем трехдневном тренинге по SQL!
Начинаем сегодня в 19:00. Будем заниматься через Zoom сегодня, в среду и пятницу (19:00 - 20:00).
Записаться и оплатить участие можно здесь.
Места ещё есть!
454 · Фотография
нажмите — покажем
1 · 348 · нажмите — покажем
Опрос
нажмите — покажем
408 · нажмите — покажем
Как найти клиентов, у которых не было заказов?
A:
SELECT c.*
FROM clients c
JOIN orders o ON o.client_id = c.id
WHERE o.id IS NULL;
B:
SELECT c.*
FROM clients c
LEFT JOIN orders o ON o.client_id = c.id
WHERE o.id IS NULL;
C:
SELECT c.*
FROM clients c
RIGHT JOIN orders o ON o.client_id = c.id
WHERE o.id IS NULL;
D:
SELECT c.*
FROM clients c
WHERE c.id IN (
SELECT client_id
FROM orders
);
435 · Опрос
нажмите — покажем
476 · нажмите — покажем
У клиента с идентификатором 10 нет ни одного заказа. С каким значением в столбце ORDERS_CNT он отобразится в результате выполнения следующего запроса:
SELECT c.id, COUNT(*) ORDERS_CNT
FROM clients c
LEFT JOIN orders o
ON o.client_id = c.id
GROUP BY c.id;
504 · Опрос
нажмите — покажем
581 · нажмите — покажем
Всем привет!
Мини тест по базовый знаниям PL/SQL (ORACLE):
Как правильно обработать ситуацию, когда SELECT INTO не нашёл строку?
SELECT salary
INTO v_salary
FROM employees
WHERE employee_id = 100;
321 · Опрос
нажмите — покажем
385 · нажмите — покажем
Фотография
нажмите — покажем
нажмите — покажем
Недавно получил ещё один прекрасный отзыв от ученика курса программирования в PL/SQL! Спасибо за много добрых слов! 😊
1 · 347 · Ссылка
нажмите — покажем
нажмите — покажем
До конца сентября и Вы можете купить курс разработки в PL/SQL (ORACLE) со скидкой 65%!
Всего 8.900 руб за весь курс!
Немного цифр:
- Всего 21 видеоурок, каждый продолжительность по 1 - 1.5 часа;
- Полное сопровождение во время обучения: помощь в понимании материала, подключимся через Zoom и во всем поможем разобраться! Индивидуальная проверка самостоятельных задач. Детально работа над каждой задачей;
- 2 месяца. Чаще всего за столько проходят курс! У нас много совместной работы!
- 10 уроков нужно, чтобы уже стать уверенным программистом (разработчиком) и начать откликаться на вакансии!
- 1 ценный и заслуженный сертификат в конце курса!
Подробнее о курсе Записаться
454 · Видео
Оптимизация запроса.mp4 · 40.2 МБ · нажмите — покажем
Оптимизация запроса.mp4 · 40.2 МБ · нажмите — покажем
Всем привет!
Записал небольшое видео про оптимизацию SQL запросов!
5 · 251 · Есть таблица orders:
id customer_id order_date amount
1 101 2026-01-10 1000
2 101 2026-01-15 500
3 102 2026-01-20 2000
4 103 2026-02-01 300
5 101 2026-02-10 700
Задача: найти клиентов, у которых сумма заказов в феврале больше, чем в январе.
Какой запрос правильный?
A.
SELECT customer_id
FROM orders
WHERE EXTRACT(MONTH FROM order_date) = 2
GROUP BY customer_id
HAVING SUM(amount) > SUM(amount);
B.
SELECT customer_id
FROM orders
GROUP BY customer_id
HAVING SUM(CASE WHEN EXTRACT(MONTH FROM order_date) = 2 THEN amount ELSE 0 END)
> SUM(CASE WHEN EXTRACT(MONTH FROM order_date) = 1 THEN amount ELSE 0 END);
C.
SELECT customer_id
FROM orders
WHERE EXTRACT(MONTH FROM order_date) = 2
AND SUM(amount) > (
SELECT SUM(amount)
FROM orders
WHERE EXTRACT(MONTH FROM order_date) = 1
)
GROUP BY customer_id;
D.
SELECT customer_id
FROM orders
WHERE EXTRACT(MONTH FROM order_date) IN (1, 2)
GROUP BY customer_id
HAVING SUM(amount) > 0;
230 · Опрос
нажмите — покажем
237 · нажмите — покажем
Фотография
нажмите — покажем
2 · 204 · нажмите — покажем