sql_ready | Unsorted

Telegram-канал sql_ready - SQL Ready | Базы Данных

7786

Авторский канал про Базы Данных и SQL Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Автор: @energy_it

Subscribe to a channel

SQL Ready | Базы Данных

📂 Напоминалка для работы с индексами в базах данных!

Например, B+ Tree Index используется для быстрого поиска и сортировки, а Hash Index подходит для точных совпадений по ключу.

На картинке — 5 основных структур данных, на которых строятся индексы в современных СУБД.

Сохрани, чтобы не забыть!

➡️ SQL Ready | #ресурс

Читать полностью…

SQL Ready | Базы Данных

Забудь про ChatGPT. Это как просить калькулятор нарисовать картину.

Пока массы гоняют одни и те же скучные запросы в зацензуренные боты, реальная революция ИИ в канале «Техноразум»:

— Нейросети, которые не боятся запретных тем ( 🔞)
— Скрытые функции, которые другие ИИ прячут за платную подписку или цензурой
— Настоящие инструкции и промты для взлома творческих шаблонов

Переходи к настоящим возможностям, забудь про детский сад нейросетей: /channel/+7dOPAyODQ6

Читать полностью…

SQL Ready | Базы Данных

Почему ваше резюме попадает в папку «Отказы»?

На картинке вы видите 295 отказов.

Среднестатистический соискатель думает: «Нужно лучше составить резюме» или «У меня мало опыта».

Рекрутер видит другое: 295 ошибок.

❌ Неправильно выбранная стратегия откликов.
❌ Ключевые слова, которые не видит система ATS.
❌ Отклик на ФЕЙКОВЫЕ вакансии.

Работодатели не будут учить вас, как проходить их собственные фильтры. Это не в их интересах. Но это в наших интересах.

Мы — @Mathcareer — знаем систему изнутри.

Хотите узнать, что на самом деле скрывается за отказами и как это исправить? Подписывайтесь: /channel/+erDge2ZLK4BmM2Ri

Читать полностью…

SQL Ready | Базы Данных

🖥 Как восстановить пользовательские сессии без session_id?

SQL позволяет восстановить сессии даже без session_id, выделяя их по временным разрывам и последовательности событий.

Сегодня в задаче:

• Определим моменты, когда начинается новая сессия;

• Присвоим каждому событию уникальный session_id с помощью оконной суммы;

• Получим полноценные сессии так же, как это делают продуктовые аналитические платформы.


Пригодится для расчёта удержания, построения пользовательских путей, анализа фич и диагностики проблем поведения.

➡️ SQL Ready | #задача

Читать полностью…

SQL Ready | Базы Данных

Работа со строками в PostgreSQL — извлекаем данные с помощью регулярных выражений!

В аналитике часто нужно разобрать строку: вытащить домен из email, код из SKU, номер из текста. PostgreSQL предоставляет функции regexp_match и regexp_replace, позволяющие делать это напрямую в SQL.

Создадим таблицу:

CREATE TABLE users (
id INT,
email TEXT,
profile_code TEXT
);


Извлечём домен из email:
SELECT 
id,
email,
(regexp_match(email, '@(.+)$'))[1] AS domain
FROM users;


regexp_match возвращает один массив, и [1] достаёт первую группу. Паттерн @(.+)$ берёт всё, что стоит после символа @.

Вытащим числовую часть из кода профиля, например "USR-2391-A":
SELECT 
id,
profile_code,
(regexp_match(profile_code, '([0-9]+)'))[1] AS numeric_part
FROM users;


Паттерн ([0-9]+) извлекает последовательность цифр.

Удалим всё кроме букв и цифр — удобно для нормализации входных данных:
SELECT 
id,
regexp_replace(profile_code, '[^A-Za-z0-9]', '', 'g') AS cleaned
FROM users;


🔥 Такие операции часто используются при подготовке данных, парсинге логов, анализе текстовых полей и нормализации входных атрибутов.

➡️ SQL Ready | #практика

Читать полностью…

SQL Ready | Базы Данных

Как точечно понять, почему конкретный индекс НЕ используется оптимизатором?

Если запрос игнорирует индекс, причина может быть не в индексе, а в том, что PostgreSQL не знает, насколько селективное значение в колонке.

Обновить статистику можно точечно, для одной конкретной колонки:

ANALYZE users (status);


Теперь оптимизатор видит реальное распределение значений и может корректно выбрать Index Scan.

Хотите повысить точность — увеличьте глубину сбора статистики:
ALTER TABLE users
ALTER COLUMN status SET STATISTICS 500;


🔥 Позволяет понять почему план деградирует и как вернуть индекс в работу, без изменения кода и структуры данных.

➡️ SQL Ready | #совет

Читать полностью…

SQL Ready | Базы Данных

ALL и ANY в SQL — учимся использовать для сравнения с подзапросами!

Эти операторы предназначены для сравнения результатов одного SELECT с результатами второго SELECT из подзапроса, что может быть удобно в некоторых случаях: если подзапрос возвращает небольшое количество строк или когда нужно сравнить значение хотя бы с одним значением из подзапроса.

Представим, что нам нужно найти все продукты, цена которых выше, чем цена любого продукта в категории Discount:

SELECT product, price 
FROM products
WHERE price > ALL (SELECT price FROM products WHERE category = 'Discount');


Теперь найдем всех клиентов, заказавших хотя бы один продукт с ценой выше 1000 рублей:
SELECT DISTINCT customer_id 
FROM orders
WHERE product_id = ANY (SELECT product_id FROM products WHERE price > 1000);


И найдем всех клиентов, которые заказывали продукты из определенной категории:
SELECT DISTINCT customer_id
FROM orders
WHERE product_id = ANY (SELECT product_id FROM products WHERE category = 'Electronics');


🔥 Но помните, что использование ALL и ANY возможно только с подзапросами и может быть неэффективным, если подзапрос возвращает большое количество строк.

➡️ SQL Ready | #практика

Читать полностью…

SQL Ready | Базы Данных

RETURNING: получение данных прямо из DML!

Во многих СУБД (например, PostgreSQL, Oracle и др.) оператор RETURNING позволяет вернуть значения вставленных, обновлённых или удалённых строк без дополнительного SELECT.

Вставляем строку и сразу получаем созданный ID:

INSERT INTO users (name, email)
VALUES ('Anna Ivanova', 'anna@example.com')
RETURNING id;


Обновляем запись и возвращаем изменённое значение:
UPDATE accounts
SET balance = balance + 500
WHERE id = 10
RETURNING balance AS new_balance;


Удаляем строку и получаем данные до удаления:
DELETE FROM orders
WHERE id = 42
RETURNING order_date, amount;


Возвращаем множество строк:
UPDATE products
SET price = price * 1.10
WHERE category = 'Books'
RETURNING id, price;


🔥 RETURNING упрощает логику: нет необходимости выполнять дополнительный запрос, чтобы получить новые данные — они доступны сразу в рамках одного DML.

➡️ SQL Ready | #практика

Читать полностью…

SQL Ready | Базы Данных

🖥 Методы для работы с датой и временем в PostgreSQL!

Эта шпаргалка охватывает наиболее используемые функции PostgreSQL для получения текущего времени, извлечения компонентов дат, расчета интервалов, округления временных меток и преобразования Unix-времени. Подходит для разработки систем, где критична точная и предсказуемая работа с временными значениями.

➡️ SQL Ready | #шпора

Читать полностью…

SQL Ready | Базы Данных

🖥 Selectivity — почему индекс может не сработать?

Селективность определяет, сколько строк проходит через фильтр, и именно по этому показателю оптимизатор выбирает план запроса.

Сегодня в гайде:

• Как селективность влияет на выбор плана;

• Почему один и тот же запрос может работать по-разному на разных данных;

• Как устаревшая статистика приводит к “не тем” решениям оптимизатора.


Эта тема, помогает понимать реальные причины поведения плана.

➡️ SQL Ready | #гайд

Читать полностью…

SQL Ready | Базы Данных

🖥 Как восстановить состояние LRU-кэша после серии обращений?

Возьмём последовательность обращений к ключам и с помощью SQL определим, какие из них “выжили” в памяти при ограниченном размере кэша.

Сегодня в задаче:

• Найдём последнее обращение к каждому ключу, определив его актуальность на момент завершения всех операций.

• Отсортируем элементы по “новизне” использования и применим ограничение capacity;

• Получим итоговое состояние LRU-кэша;


Такой подход позволяет анализировать поведение кэшей и логи обращений без процедурного кода.

➡️ SQL Ready | #задача

Читать полностью…

SQL Ready | Базы Данных

Хотите найти дубликаты по нескольким полям и оставить только самые свежие или правильные записи?

Используйте оконную функцию ROW_NUMBER() по ключам,
которые должны быть уникальны:

ROW_NUMBER() OVER (
PARTITION BY email, phone
ORDER BY updated_at DESC
)


Первая строка в группе (dup_rank = 1) - оригинал.
Все остальные - реальные дубликаты, которые можно чистить.

Чтобы увидеть только те строки, которые должны быть удалены:
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (
PARTITION BY email, phone ORDER BY updated_at DESC
) AS dup_rank
FROM users
) t
WHERE dup_rank > 1;


🔥 Подходит для очистки данных, поиска дубликатов, контроля миграций и проверки внешних интеграций.

➡️ SQL Ready | #совет

Читать полностью…

SQL Ready | Базы Данных

👨👨👨👨👨👨👨👨👨👨

Каналы с Junior IT вакансиями
и стажировками

Подписывайся и забирай свой оффер 🤘

1. Стажировки и вакансии по России и миру
2. IT вакансии по СНГ
3. IT стажировки по СНГ
4. ИИ-ассистент для автооткликов
5. IT стажировки и волонтерства
6. IT стажировки в топовых компаниях мира
7. Удалённые IT вакансии и стажировки
8. Python вакансии и стажировки
9. БИГТЕХ вакансии и стажировки
10. Design вакансии и стажировки
11. QA вакансии и стажировки
12. Junior вакансии и стажировки
13. Frontend вакансии и вопросы собесов
14. Вакансии и стажировки для аналитиков
15. Вакансии в русских стартапах за границей
16. Вакансии и стажировки для DevOps
17. Вакансии, которых нет на ХХ.РУ

Читать полностью…

SQL Ready | Базы Данных

Миграция с MS SQL, Oracle и PostgreSQL проходит почти сама собой – возможно ли это? 🤔

📍Короткий ответ: Да.
Диасофт обновил свою СУБД Digital Q.DataBase, чтобы компании кардинально снижали сложность, сроки и стоимость импортозамещения в инфраструктуре баз данных 📉

Организации теперь могут проводить перенос данных и хранимой логики на российскую СУБД с сохранением существующих бизнес-процессов и с минимальными операционными рисками.

Это стало возможным благодаря обновлению "Полиглот" 🗣

Оно обеспечивает исполнение запросов, написанных на диалектах SQL ведущих зарубежных СУБД: Oracle, Microsoft SQL Server и PostgreSQL.

Подробно об этом расскажет спикер Диасофт на вебинаре 25 ноября.

🔗 Регистрируйтесь по ссылке!

Реклама. ООО "ДИАСОФТ ЭКОСИСТЕМА". ИНН 9715403607.

Читать полностью…

SQL Ready | Базы Данных

Удаляйте ChatGPT. Вы не умеете им пользоваться.

Большинство пользователей спамит в ИИ всякую чушь — просят рассказать анекдот, изливают душу и используют как Гугл.

Российский тимлид OpenAI Вадим Петрич рассказывает в «Доктор GPT» как извлекать из нейронок максимум пользы. Это очень интересно:

• ТОП №1 нейросеть, генерирующая видео без цензуры вообще
• Готовые промты на все случаи жизни
• Инсайды и разработки от китов индустрии

Подпишитесь, с Доктором GPT нейронки станут инструментом роста, а не безделушкой:
/channel/+5CgWzXmpgdhlMGEy

Читать полностью…

SQL Ready | Базы Данных

Как понять, какие индексы только тратят место?

Ненужные индексы замедляют вставки, обновления и VACUUM. PostgreSQL умеет показать, какие индексы ни разу не использовались.

Посмотрим статистику использования:

SELECT relname, idx_scan, pg_size_pretty(pg_relation_size(indexrelid)) AS size
FROM pg_stat_user_indexes
WHERE idx_scan = 0;


idx_scan = 0 — индекс ни разу не участвовал в плане.
size покажет, сколько места он занимает на диске.

Нужно увидеть “почти бесполезные” индексы? С сортировкой по минимальному использованию:
SELECT relname, idx_scan, idx_tup_read
FROM pg_stat_user_indexes
ORDER BY idx_scan ASC
LIMIT 10;


🔥 Инструмент позволяет быстро уменьшить нагрузку,
ускорить записи и освободить место.

➡️ SQL Ready | #совет

Читать полностью…

SQL Ready | Базы Данных

Keyset-пагинация: быстрый скролл без OFFSET!

OFFSET…LIMIT прост, но плохо масштабируется: чем дальше страница, тем медленнее запрос и выше риск дубликатов при вставках.
Keyset использует курсор (id/дату) и даёт стабильную скорость на больших объёмах.

Создаём таблицу (пример на PostgreSQL):

CREATE TABLE posts (
id BIGSERIAL PRIMARY KEY,
title TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);


Подготавливаем входящие данные с помощью CTE:
WITH cursor AS (
SELECT 1000::BIGINT AS last_seen_id
)


Здесь мы храним «курсор» — id последней записи, которую клиент уже получил.

Получаем следующую страницу без OFFSET по keyset-подходу:
SELECT p.id, p.title, p.created_at
FROM posts p
JOIN cursor c ON TRUE
WHERE p.id < c.last_seen_id
ORDER BY p.id DESC
LIMIT 20;


Запрос отдаёт следующие 20 записей с id < last_seen_id.
На клиенте берём минимальный id из результата и используем его как новый last_seen_id для следующего запроса.

🔥 Подход работает в PostgreSQL, MySQL, SQL Server и др.: стабильно, эффективно и без проблем с дубликатами при конкурентных вставках.

➡️ SQL Ready | #практика

Читать полностью…

SQL Ready | Базы Данных

✍️ LangShift — учись новому языку программирования, используя знания, которые у тебя уже есть!

Этот сайт предлагает другой путь: выбираешь язык, который уже знаешь, и переходишь на новый через сопоставление синтаксиса и парадигм. Более 80 модулей, 30+ проектов, всё бесплатно и без регистрации.

📌 Оставляю ссылочку: langshift.dev

➡️ SQL Ready | #ресурс

Читать полностью…

SQL Ready | Базы Данных

😎 На Хабре вышла полезная статья: «6 лайфхаков при внедрении СУБД: учимся на чужих граблях»!

В этой статье:
• Разберёте реальные ошибки при развёртывании СУБД;
• Узнаете, как повысить производительность запросов через правильное партицирование и не только;
• Поймёте, как организовать конкурентный доступ и обновления данных без блокировок и простоев;
• Получите шесть конкретных лайфхаков, которые помогут избежать критических проблем.


🔊 Продолжайте читать на Habr!


➡️ SQL Ready | #статья

Читать полностью…

SQL Ready | Базы Данных

😎 Sqltest - бесплатный онлайн-тренажёр для практики запросов прямо в браузере!

Вам будут доступы более 320 интерактивных задач разной сложности: от простых SELECT-запросов до вложенных подзапросов и агрегаций. Поддерживаются MySQL, PostgreSQL, MS SQL и Firebird, есть мгновенная проверка решений и удобный интерфейс для отработки навыков на практике.

📌 Оставляю ссылочку: sqltest.online

➡️ SQL Ready | #ресурс

Читать полностью…

SQL Ready | Базы Данных

📂 Напоминалка по оптимизации производительности БД!

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

На изображении — структурированное напоминание о ключевых метриках, типах нагрузок и практических стратегиях оптимизации.

Сохрани, чтобы не забыть!

➡️ SQL Ready | #ресурс

Читать полностью…

SQL Ready | Базы Данных

🖥 Какие API-маршруты действительно тормозят систему?

В производительных системах реальный UX определяется не средним временем ответа, а редкими хвостовыми задержками, из-за которых важны именно p95 и p99.

Сегодня в задаче:

• Посчитаем ключевые перцентильные метрики (p50/p95/p99) по каждому маршруту;

• Определим, какие запросы регулярно превышают собственный p99;

• Увидим, какие эндпоинты “убивают” отклик сервиса под нагрузкой;


Такой анализ помогает быстро находить узкие места API и контролировать качество работы системы.

➡️ SQL Ready | #задача

Читать полностью…

SQL Ready | Базы Данных

☕️ CodeAbbey — тренажёр алгоритмического мышления!

Сайт с огромной коллекцией задач по программированию, от самых простых до тех, что реально заставят подумать.
Учиться можно на абсолютно любом языке. Отличный способ подтянуть логику, научиться писать аккуратный код и подготовиться к собесам.

📌 Оставляю ссылочку: codeabbey.com

➡️ SQL Ready | #ресурс

Читать полностью…

SQL Ready | Базы Данных

QUALIFY: фильтрация после оконных функций!

Иногда нужно фильтровать строки после вычисления оконных функций. В большинстве диалектов SQL для этого нужен подзапрос, но в ряде СУБД (Snowflake, BigQuery, Teradata, Oracle 23c) есть конструкция QUALIFY, позволяющая делать это напрямую.

Отбираем строки только с первым местом внутри категории:

SELECT id, category, score,
RANK() OVER (
PARTITION BY category
ORDER BY score DESC
) AS rnk
FROM results
QUALIFY rnk = 1;


Фильтруем строки, где разница с предыдущим значением больше 50:
SELECT id, value,
value - LAG(value) OVER (
ORDER BY id
) AS diff_prev
FROM metrics
QUALIFY diff_prev > 50;


Оставляем топ-3 самых больших заказов каждого клиента:
SELECT customer_id, order_id, amount,
ROW_NUMBER() OVER (
PARTITION BY customer_id
ORDER BY amount DESC
) AS rn
FROM orders
QUALIFY rn <= 3;


🔥 QUALIFY помогает писать чище и короче, избавляя от лишних подзапросов. Особенно полезен в аналитических задачах с большим числом оконных функций.

➡️ SQL Ready | #практика

Читать полностью…

SQL Ready | Базы Данных

Как увидеть фрагментацию таблиц?

Часто производительность падает из-за накопления устаревших (dead) кортежей, которые остаются после UPDATE/DELETE до следующего VACUUM.

Посмотреть их реальный объём можно напрямую из системной статистики:

SELECT relname,
n_dead_tup,
n_live_tup
FROM pg_stat_all_tables
WHERE relname = 'orders';


n_dead_tup — количество устаревших кортежей, n_live_tup — актуальные строки.

Чтобы быстро найти самые “раздутые” таблицы, отсортируем по dead-tup:
SELECT relname, n_dead_tup
FROM pg_stat_all_tables
ORDER BY n_dead_tup DESC
LIMIT 10;


Хотите оценить степень фрагментации? Сравните dead/live в процентах:
SELECT relname,
n_dead_tup,
n_live_tup,
round(100.0 * n_dead_tup / (n_live_tup + 1), 2) AS dead_ratio
FROM pg_stat_all_tables;


🔥 Это позволяет быстро увидеть, где появляются накладные расходы на I/O и почему планы запроса деградируют.

➡️ SQL Ready | #совет

Читать полностью…

SQL Ready | Базы Данных

🖥 Функции для работы с JSON в MySQL!

В этой шпаргалке собраны ключевые функции и операторы MySQL для чтения, обновления, проверки и формирования JSON-структур. Материал охватывает извлечение значений, модификацию полей, работу с объектами и массивами, а также проверку вложенных данных. Подходит для хранения метаданных, гибких профилей и других полуструктурированных данных.

➡️ SQL Ready | #шпора

Читать полностью…

SQL Ready | Базы Данных

🖥 Симуляция очереди: кто получит ресурс первым!

Смоделируем работу очереди, где задачи приходят в разное время и имеют разные уровни приоритета, нужно определить, кто будет обслужен раньше.

В этом посте:

• Разберём, как упорядочить поток задач так, чтобы высокий приоритет перехватывал очередь;

• Построим механизм, который при равных приоритетах будет соблюдать FIFO и не нарушать логику поступления задач;

• Получим итоговый порядок обработки.


Техника помогает понять, как моделировать поведение планировщиков, прогнозировать задержки и анализировать нагрузку.

➡️ SQL Ready | #задача

Читать полностью…

SQL Ready | Базы Данных

SAVEPOINT: частичный откат без пересборки всей транзакции!

При работе с многошаговыми транзакциями важно уметь откатывать только часть выполненных действий. SAVEPOINT даёт такой контроль в большинстве СУБД. Пример ниже оформлен для Oracle, но принцип похож и в других диалектах.

Создаём таблицу:

CREATE TABLE operations (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
description VARCHAR2(200),
amount NUMBER(10,2) CHECK (amount > 0)
);


Добавляем первую операцию:
INSERT INTO operations (description, amount)
VALUES ('Initial payment', 150.00);


Фиксируем точку сохранения:
SAVEPOINT sp_step1;


Выполняем шаг, который формально корректен, но позже мы решаем его отменить (например, неверная сумма):
INSERT INTO operations (description, amount)
VALUES ('Wrong amount', 1000.00);


Понимаем, что значение было ошибочным, и откатываемся к точке сохранения, не трогая всю транзакцию целиком:
ROLLBACK TO sp_step1;


Выполняем корректную альтернативу:
INSERT INTO operations (description, amount)
VALUES ('Corrected entry', 75.00);


Фиксируем изменения и проверяем результат:
COMMIT;

SELECT * FROM operations;


🔥 Такой подход позволяет в одной транзакции безопасно откатывать только ошибочные шаги, сохраняя корректные операции.

➡️ SQL Ready | #практика

Читать полностью…

SQL Ready | Базы Данных

🖥 Индексы — ключ к быстрому SQL. Особенно полезны при большом объёме данных и частых фильтрациях!

Правильно выбранный тип и структура индекса значительно ускоряют SELECT-запросы, но могут замедлять INSERT и UPDATE. Всегда проверяй эффективность через EXPLAIN ANALYZE.

➡ SQL Ready | #шпора

Читать полностью…

SQL Ready | Базы Данных

📂 Напоминалка для работы с индексами в базах данных!

Например, clustered index определяет физический порядок строк в таблице, а secondary index позволяет эффективно искать по неуникальным полям.

На картинке — основные типы индексов, которые должен знать каждый разработчик, чтобы уверенно работать с производительностью запросов.

Сохрани, чтобы не забыть!

➡ SQL Ready | #ресурс

Читать полностью…
Subscribe to a channel