SQL Ready | Базы Данных
15.4K subscribers
1.2K photos
66 videos
2 files
577 links
Авторский канал про Базы Данных и SQL
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!

Автор: @energy_it

РКН: https://clck.ru/3QREBc

Реклама на бирже: https://telega.in/c/sql_ready
Download Telegram
🖥 Bitmap Scan — быстрые выборки по нескольким фильтрам!

Когда фильтры задействуют несколько индексов, Index Scan может работать неэффективно. Bitmap Scan объединяет результаты этих индексов и читает только нужные страницы.

Сегодня в гайде:
Как bitmap объединяет несколько индексов;

Что означает BitmapAnd в плане выполнения;

Почему эта техника ускоряет сложные фильтры на больших таблицах.


Прием позволяет эффективно обрабатывать сложные фильтры и стабильно работать с большими таблицами.

➡️ SQL Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1310🔥9
Хотите найти дубликаты по нескольким полям и оставить только самые свежие или правильные записи?

Используйте оконную функцию 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 | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍158🤝1
🖥 Функции для работы с JSON в MySQL!

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

➡️ SQL Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍12🤝62
🖥 Как восстановить состояние LRU-кэша после серии обращений?

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

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

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

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


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

➡️ SQL Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍148🔥7🤝2
Как увидеть фрагментацию таблиц?

Часто производительность падает из-за накопления устаревших (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 | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍98
🖥 Selectivity — почему индекс может не сработать?

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

Сегодня в гайде:
Как селективность влияет на выбор плана;

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

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


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

➡️ SQL Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍177🔥7🤝1
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 | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍97🤝1