Oracle Developer👨🏻‍💻
3.21K subscribers
604 photos
66 videos
2 files
480 links
🔝 канал о разработке в СУБД Oracle:
SQL, PL/SQL, оптимизация, архитектура и многое другое...

Backend-pro.ru - обучение по различным программам, связанных с backend-разработкой для ФЛ и ЮЛ.

Отец-основатель: @denis_dbd Кивилёв Денис
Download Telegram
Deterministic-функции

Друзья, всем привет!

У меня для вас свежее видео 🎥
В этот раз копнул в сторону детерминированных/чистых PL/SQL-функций.
Что это такое? Когда использовать? Как можно ускорить выполнение SQL-запросов, используя их?

Ответы на эти вопросы смотрите в уроке. Надеюсь, понравится 😉

Кстати, если помните, весной в голосовании вы выбрали урок про виды индексного доступа. Концепция урока пока бродит в голове. Хочется разжевать тему доступно. Есть желание, попробовать разнообразить его анимацией, чтобы он был наглядней.
К сожалению, Гугл презентации не так богаты в части анимации. Если кто-то встречал софт по созданию визуализаций для алгоритмов - напишите, буду благодарен.

А пока, приятного просмотра (6 минут).

#видео #plsql #функции #deterministic
Задача о поиске по колонке Unix time
постановку см. в посте вторника.

Решение:
Как минимум, два способа:
1️⃣ Создать функциональный индекс по функции преобразования столбца event_unix_time.
2️⃣ Создать виртуальную колонку с использованием функции преобразования + индекс по ней.

Для обоих этих случаев, было бы удобно использовать функцию конвертации из числового unix time в оракловый формат date.

Например, такую:
create or replace function unixtime_to_date(p_unix_time number)return date
deterministic
is
begin
return(timestamp '1970-01-01 00:00:00 GMT' +
numtodsinterval(p_unix_time, 'second')) at time zone 'Europe/Moscow';
end;

Просто функцию использовать не получится, нужно объявить её deterministic.
Что это такое и с чем это едят - смотрите в видео-уроке (предыдущий пост).

Решение 1
create index event_unix_time_idx on event(unixtime_to_date(event_unix_time));
select * from event t where unixtime_to_date(event_unix_time) <= date '2020-07-01';

Решение 2
create table event(
event_id number(30) primary key,
event_unix_time number(21) not null,
event_dtime date as (unixtime_to_date(event_unix_time)) not null,
message varchar2(200 char) not null
);

create index event_unix_time_idx on event(event_dtime);
select * from event t where event_dtime <= date '2020-07-01';

Если задачка понравилась - ставьте 👍

#решениезадачи #deterministic
Техническое собеседование в Тинькофф. Ответы

Список вопросов см. в посте вторника.

1️⃣ Секционирование
Одна из базовых тем для разработчика. Знать обязан каждый.
По тегу #секционирование можно найти несколько постов. Видов секционирования больше чем в этом посте. В 2021м я даже проводил обучение. Кстати, если наберется группа из 10 человек проведу еще. Кому интересно пишите в личку.

2️⃣ Индексы
🔹 про виды индексов было в посте на прошлой неделе.
🔹 как правильно выбирать столбцы: зависит от системы olt/dwh -> физической организации индекса B-tree, bitmap. Для B-tree важный критерий уникальность значений (дб максимальна), для bitmap - наоборот (пример, пол). + фишки с лидирующим столбцом. Как раз в курсе оптимизации будем разбирать.

3️⃣ Вопросы связанные с механизмом многоверсионности (UNDO)
🔹 помним, что измененные блоки/строки попадают в UNDO. При выполнении запроса - с UNDO выгребаются данные соответствующие определенным критериям.
🔹 два поста на классические ошибки - пост1, пост2 нужно понимать почему они возникают и как с ними бороться.

4️⃣ Блокировки
select for update + опции, dbms_lock, lock table, стратегии оптимистичная/пессимистичная, защелки в SGA.

5️⃣ Транзакции
вот прям по тегу #транзакции учим наизусть и этого хватит на все собеседования.

6️⃣ Многопоточность
Oracle это все же не Java. Тут нет такого многообразия механизмов. Все ограничивается набором из dbms_job, dbms_scheduler, dbms_parallel, хинт parallel.

7️⃣ Кэширование
Различные виды кэшей - кэши в SGA, #result_cache, #deterministic и самописные решения на основе коллекций + состояние пакета.

8️⃣ Оптимизация
Удивился когда обнаружил 37 постов по тегу #оптимизация В них есть частичный ответ на извечный вопрос “что делать, если запрос начал тормозить”. Опять же не рекламы ради скажу, что будем разбирать подробно это на курсе по оптимизации.

Пост получился длинноват. При том, что я не очень подробно ответил на все вопросы. Каждый можно знатно помусолить. Это, всего лишь, направления.

Не факт, что у вас будут те же вопросы 😉

Палец вверх, если зашло 👍
Обсудить в чатике 🫂

#решениезадачи #тинькофф #собеседование
Oracle Developer