SQL Ready | Базы Данных
Авторский канал про Базы Данных и SQL Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Cотрудничество: @energy_c РКН: https://clck.ru/3QREBc
Больше📈 Аналитический обзор Telegram-канала SQL Ready | Базы Данных
Канал SQL Ready | Базы Данных (@sql_ready) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 17 719 подписчиков, занимая 7 336 место в категории Технологии и приложения и 37 136 место в регионе Россия.
📊 Показатели аудитории и динамика
С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 17 719 подписчиков.
Согласно последним данным от 18 октября, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило 696, а за последние 24 часа — 5, при этом общий охват остаётся высоким.
- Статус верификации: Не верифицирован
- Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 12.57%. В первые 24 часа после публикации контент обычно набирает 6.05% реакций от общего числа подписчиков.
- Охват публикаций: В среднем каждый пост получает 2 222 просмотров. В течение первых суток публикация набирает 1 069 просмотров.
- Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 23.
- Тематические интересы: Контент сосредоточен на ключевых темах, таких как sql, строка, users, индекс, user_id.
📝 Описание и контентная политика
Автор описывает ресурс как площадку для выражения субъективного мнения:
“Авторский канал про Базы Данных и SQL
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!
Cотрудничество: @energy_c
РКН: https://clck.ru/3QREBc”
Благодаря высокой частоте обновлений (последние данные получены 19 октября, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.
Transport Subsystem — приём запроса от клиента по сетевому протоколу, установка сессии, а Query Processor — синтаксический и семантический разбор, построение дерева запроса (parse tree).
На схеме показан полный путь запроса — от клиента до хранения данных.
Сохрани, чтобы не забыть!
➡️ SQL Ready | #ресурсprefix%. Но при поиске по подстроке (%text%) или сложных шаблонах они обычно не используются, и запрос превращается в полный скан таблицы даже на миллионах строк.
CREATE EXTENSION IF NOT EXISTS pg_trgm;
Расширение pg_trgm добавляет триграммные индексы, которые эффективно ищут подстроки, частичные совпадения и нечёткие шаблоны:
CREATE INDEX users_email_trgm_idx
ON users USING gin (email gin_trgm_ops);
После этого запросы вроде:
SELECT *
FROM users
WHERE email ILIKE '%company%';
Начинают использовать индекс и ускоряются, особенно для поиска по почте, логинам, URL и другим текстовым идентификаторам:
EXPLAIN ANALYZE
SELECT *
FROM users
WHERE email ILIKE '%company%';
🔥 Важно: триграммный индекс занимает больше места и замедляет INSERT/UPDATE, но для больших таблиц с поиском по подстроке это почти всегда оправдано.
➡️ SQL Ready | #советОставляю ссылочку: GitHub 📱➡️ SQL Ready | #репозиторий
VIEW — сохранённый запрос, как объект схемы. Для обычных VIEW данные не дублируются: оптимизатор, как правило, раскрывает их в подзапрос и строит единый план (зависит от СУБД):
SELECT *
FROM active_users
WHERE email LIKE '%@company.com';
Логика фильтрации находится в одном месте, без копирования условий по коду.
CREATE OR REPLACE VIEW active_users AS
SELECT id, name, email
FROM users
WHERE deleted_at IS NULL
AND NOT is_blocked;
CREATE OR REPLACE позволяет централизованно менять логику (если сохраняется совместимый контракт колонок), не переписывая клиентские запросы:
GRANT SELECT ON active_users TO reporting_role;
🔥 Права можно выдавать на VIEW, а не на таблицу, скрывая лишние поля и фиксируя допустимую проекцию (механика зависит от СУБД).
➡️ SQL Ready | #советusers(id, country, revenue)
Нужно разбить пользователей каждой страны на 4 группы по выручке — от меньшей к большей.
Решение через NTILE:
SELECT
id,
country,
revenue,
NTILE(4) OVER (
PARTITION BY country
ORDER BY revenue
) AS revenue_quartile
FROM users;
NTILE(4) распределяет строки внутри каждой партиции на 4 группы максимально равного размера.
ORDER BY определяет, какие значения попадут в «нижние» и «верхние» группы.
Результат: quartile = 1 — пользователи с минимальной выручкой, quartile = 4 — пользователи с максимальной выручкой
Важно: группы не всегда будут строго одинаковыми по размеру. Если строк не делится нацело, первые группы получат на одну строку больше.
Если убрать PARTITION BY:
NTILE(4) OVER (ORDER BY revenue)
Разбиение произойдёт по всей таблице, без учёта страны.
Практический кейс — сегментация:
SELECT *
FROM (
SELECT
*,
NTILE(10) OVER (
PARTITION BY country
ORDER BY revenue DESC
) AS decile
FROM users
) t
WHERE decile = 1;
Так можно выбрать топ-10% пользователей в каждой стране.
NTILE работает построчно и не агрегирует данные — каждая строка сохраняется, а группа добавляется как аналитическая метка.
🔥 Используйте NTILE, когда нужно сегментировать данные внутри группы на равные части без предварительной агрегации.
➡️ SQL Ready | #практикаОставляю ссылочку: GitHub 📱➡️ SQL Ready | #репозиторий
Разбор типовых приёмов классификации данных, обработки NULL, подстановки значений по условиям и вычисления итоговых результатов прямо в запросах. Полезно для отчётов, аналитики, бизнес-логики в SELECT, упрощения WHERE и ORDER BY, а также для написания компактного и читаемого SQL без изменения схемы БД.
➡️ SQL Ready | #шпораemployees:
FROM employees e
JOIN employees m
e — это сотрудник, m — это менеджер.
Физически это одна и та же таблица, но логически, разные роли:
ON m.id = e.manager_id
Связь читается так, у сотрудника есть manager_id, который указывает на id другого сотрудника.
🔥 Такой приём используется не только для менеджеров. Категории и родительские категории, комментарии и ответы, версии сущностей, связи предыдущий / следующий, графы, цепочки состояний и др.
➡️ SQL Ready | #совет• Разбирается, как вынести тяжёлые отчёты 1С с мастер-базы на реплику;
• Показывается настройка репликации PostgreSQL/Tantor DB под реальные сценарии 1С;
• Анализируются узкие места, задержки репликации и влияние отчётных запросов;
• Даются результаты нагрузочного тестирования и выводы, которые можно применить в системах.
🔊 Продолжайте читать на Habr!➡️ SQL Ready | #статья
ORDER BY управляет порядком строк только в финальном результате запроса. В подзапросах и CTE он не гарантирует порядок строк, если не используется вместе с ограничением количества возвращаемых данных.
Причина в том, что оптимизатор может свободно менять план выполнения, пока итоговый результат формально остаётся корректным.
Таблица событий:
events(id, user_id, created_at)
Попытка взять последние события через подзапрос:
SELECT *
FROM (
SELECT *
FROM events
ORDER BY created_at DESC
) t;
Несмотря на явный ORDER BY внутри подзапроса, внешний запрос не содержит сортировки.
Это означает, что порядок строк на выходе не определён, и СУБД имеет право проигнорировать внутреннюю сортировку как не влияющую на результат.
Корректный вариант — сортировать во внешнем запросе:
SELECT *
FROM events
ORDER BY created_at DESC;
Именно этот ORDER BY гарантирует порядок строк, который получит клиент или приложение.
Когда ORDER BY в подзапросе имеет смысл — он становится значимым только вместе с ограничением:
SELECT *
FROM (
SELECT *
FROM events
ORDER BY created_at DESC
LIMIT 10
) t
ORDER BY created_at DESC;
В этом случае сортировка в подзапросе используется для выбора нужных строк, а не для их отображения.
Внутренний ORDER BY определяет, какие именно 10 строк попадут в подзапрос, а внешний ORDER BY задаёт порядок финального результата.
Аналогичный принцип работает с оконными функциями:
SELECT id, user_id, created_at
FROM (
SELECT
id,
user_id,
created_at,
ROW_NUMBER() OVER (
PARTITION BY user_id
ORDER BY created_at DESC
) AS rn
FROM events
) s
WHERE rn = 1;
Здесь ORDER BY влияет на вычисление ROW_NUMBER, то есть на логику нумерации строк внутри окна, но не определяет порядок вывода строк в результирующем наборе.
🔥 ORDER BY — это про порядок выдачи результата, а не про порядок хранения данных. Без внешнего ORDER BY СУБД не обязана возвращать строки в каком-либо определённом порядке.
➡️ SQL Ready | #практика