SQL Ready | Базы Данных
Авторский канал про Базы Данных и SQL Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Cотрудничество: @energy_c РКН: https://clck.ru/3QREBc
Show more📈 Analytical overview of Telegram channel SQL Ready | Базы Данных
Channel SQL Ready | Базы Данных (@sql_ready) in the Russian language segment is an active participant. Currently, the community unites 17 741 subscribers, ranking 7 336 in the Technologies & Applications category and 37 136 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 17 741 subscribers.
According to the latest data from 18 October, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by 696 over the last 30 days and by 5 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 12.57%. Within the first 24 hours after publication, content typically collects 6.05% reactions from the total number of subscribers.
- Post reach: On average, each post receives 2 222 views. Within the first day, a publication typically gains 1 069 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 23.
- Thematic interests: Content is focused on key topics such as sql, строка, users, индекс, user_id.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“Авторский канал про Базы Данных и SQL
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!
Cотрудничество: @energy_c
РКН: https://clck.ru/3QREBc”
Thanks to the high frequency of updates (latest data received on 19 October, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
WHERE, а цель — быстро получить последние N записей по времени.
Таблица:
audit_logs(id, service, level, created_at, payload JSONB)
Индекс под узкий сегмент:
CREATE INDEX idx_billing_errors
ON audit_logs (created_at DESC)
WHERE service = 'billing' AND level = 'error';
Меньший размер индекса снижает нагрузку на buffer cache, уменьшает вероятность bloat и объём фонового обслуживания, а операции с индексом требуют меньше ресурсов.
Запрос за последними ошибками за сутки:
SELECT id, created_at, payload
FROM audit_logs
WHERE service = 'billing'
AND level = 'error'
AND created_at > NOW() - INTERVAL '1 day'
ORDER BY created_at DESC
LIMIT 15;
Связка ORDER BY created_at DESC + LIMIT позволяет планировщику сделать Index Scan и остановиться рано, как только найдено нужное количество строк.
index-only scan возможен только если все нужные колонки читаются из индекса, и страницы таблицы помечены all-visible (visibility map).
Если вам действительно нужен index-only для части полей, можно использовать INCLUDE:
CREATE INDEX idx_billing_errors_top
ON audit_logs (created_at DESC)
INCLUDE (id)
WHERE service = 'billing' AND level = 'error';
Частичный индекс по JSONB boolean-предикату (когда совпадающих строк мало и условие повторяется):
CREATE INDEX idx_critical_errors
ON audit_logs (created_at DESC)
WHERE level = 'error'
AND payload @> '{"critical": true}';
И быстрый top-N:
SELECT id, service, created_at
FROM audit_logs
WHERE level = 'error'
AND payload @> '{"critical": true}'
ORDER BY created_at DESC
LIMIT 10;
🔥 Частичные индексы — простой и экономный инструмент для повторяемого узкого среза + быстрого top-N по времени.
➡️ SQL Ready | #практика• Автор шаг за шагом показывает, как использовать ключевые возможности PostgreSQL;
• Приводятся понятные примеры SQL-запросов с объяснением, когда и почему применять те или иные конструкции;
• Рассматриваются полезные трюки - преобразование типов, агрегации и работа с массивами;
• Все примеры можно сразу запускать.
🔊 Продолжайте читать на Habr!➡️ SQL Ready | #статья
= ломается, если возможен NULL:
SELECT *
FROM users
WHERE email = 'admin@example.com';
Эта проверка никогда не вернёт строки с NULL, даже если логически они равны:
SELECT *
FROM users
WHERE email IS NOT DISTINCT FROM NULL;
IS NOT DISTINCT FROM считает NULL = NULL и работает как настоящее равенство:
sql
SELECT *
FROM users
WHERE (email, phone)
IS NOT DISTINCT FROM ('a@b.com', NULL);
Работает и для составных сравнений, без OR … IS NULL.
🔥 IS NOT DISTINCT FROM - способ сравнивать значения, когда NULL допустимое состояние, а не исключение.
➡️ SQL Ready | #советINNER JOIN возвращает только совпадающие строки из двух таблиц, а LEFT JOIN позволяет получить все записи из основной таблицы, даже если связанной записи нет.
На картинке — 4 самых используемых типа SQL JOIN, которые постоянно встречаются в рабочих запросах.
Сохрани, чтобы не забыть!
➡️ SQL Ready | #ресурс• Как запрос выполняется только из индекса; • Как убедиться, что таблица не читается (Heap Fetches: 0 в плане); • Как проектировать индексы, чтобы покрывать SELECT полностью.Покрывающий индекс устраняет table lookup, снижает I/O и делает чтение стабильным при росте данных. ➡️ SQL Ready | #гайд
Linux/DevOps/CI среде и хочет разбираться, а не наугад копипастить из StackOverflow.
📌 Оставляю ссылочку: explainshell.com
➡️ SQL Ready | #ресурсEXPLAIN показывает, что делает база данных под капотом при выполнении SQL-запроса. Это помогает найти узкие места и понять, почему запрос может работать медленно.
Допустим, у нас есть запрос:
SELECT * FROM books WHERE author = 'Толстой';
Запускаем EXPLAIN, чтобы посмотреть план выполнения:
EXPLAIN SELECT * FROM books WHERE author = 'Толстой';
Если видим Table Scan или Seq Scan — это означает, что происходит полный просмотр таблицы. Такой способ может быть медленным, особенно при большом объёме данных.
Чтобы ускорить выполнение, создаём индекс:
CREATE INDEX idx_author ON books(author);
🔥 Теперь при повторном EXPLAIN запрос может использовать Index Scan, что значительно быстрее.
➡️ SQL Ready | #практика{… устанавливаю личность…}
⌛️ loading . . .
{…сканирую слитые базы…}
доступ ✅ разрешён
🎥 системы распознавания лиц
👁️ базы правоохранителей
📁 утилиты для взлома слежки
↑ ↓
Добро пожаловать на самый продвинутый ресурс по кибербезопасности и хакингуC O N И E C T ⇢ @TechLab
1NF требует атомарных значений, 2NF убирает частичные зависимости, а 3NF избавляет от транзитивных зависимостей.
На картинке — основные нормальные формы, которые полезны при проектировании SQL-баз данных.
Сохрани, чтобы не забыть!
➡️ SQL Ready | #ресурсSELECT должны работать с одной и той же версией данных, даже если параллельно идут изменения.
BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
В PostgreSQL это фиксирует MVCC snapshot в момент первого statement внутри транзакции:
SELECT COUNT(*) FROM orders;
Все последующие SELECT читают один и тот же snapshot и не видят новые COMMIT из других сессий, при этом собственные изменения транзакции видны:
SELECT SUM(amount) FROM orders;
Это гарантирует согласованность результатов между запросами без блокировки пишущих транзакций:
COMMIT;
🔥 После COMMIT snapshot освобождается, транзакция завершается.
➡️ SQL Ready | #советPARTITION BY и ORDER BY, но и то, какие строки попадают в окно вычисления. За это отвечают оконные фреймы — ROWS и RANGE.
Таблица операций:
transactions(id, user_id, amount, created_at)
Накопительная сумма по пользователю:
SUM(amount) OVER (
PARTITION BY user_id
ORDER BY created_at
)
При наличии ORDER BY и отсутствии явного фрейма в большинстве СУБД используется RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.
Если значения created_at совпадают, сумма считается сразу по группе строк (peers).
Среднее по последним 3 операциям:
AVG(amount) OVER (
PARTITION BY user_id
ORDER BY created_at, id
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
)
ROWS формирует окно по количеству строк. Детерминированный ORDER BY необходим для воспроизводимого результата.
Сумма за последние 7 дней (пример для PostgreSQL):
SUM(amount) OVER (
PARTITION BY user_id
ORDER BY created_at
RANGE BETWEEN INTERVAL '7 days' PRECEDING AND CURRENT ROW
)
RANGE формирует окно по значениям ORDER BY. Поддержка и синтаксис интервалов зависят от СУБД; часто допускается только одно выражение в ORDER BY.
🔥 Важно помнить: ROWS — предсказуем по количеству строк, RANGE — удобен для временных интервалов и peer-групп, неявный фрейм может менять результат вычислений
➡️ SQL Ready | #практикаUNIQUE, но итоговое состояние корректно:
BEGIN;
Включаем отложенную проверку конкретного ограничения, оно проверится только при COMMIT:
SET CONSTRAINTS users_email_uniq DEFERRED;
Теперь можно выполнять UPDATE/INSERT, даже если в процессе появляются дубликаты:
UPDATE users
SET email = lower(email);
Фиксация происходит один раз, если финальное состояние валидно, транзакция коммитится:
COMMIT;
Если уникальность нарушена в конце будет ROLLBACK, без частичных изменений.
🔥 Отложенные ограничения позволяют безопасно менять данные внутри транзакции, сохраняя целостность и контроль без временного снятия UNIQUE.
➡️ SQL Ready | #совет• Автор показывает, как хранить и группировать SQL-запросы в одном .sql-файле по сущностям;
• Рассказывается, как использовать go:embed для встраивания этих файлов в бинарник и загружать запросы по имени;
• Представлен парсер, который разбирает .sql с именованными секциями;
• Показаны преимущества подхода: подсветка SQL в IDE, чистый Go-код и др.
🔊 Продолжайте читать на Habr!➡️ SQL Ready | #статья
