Селективность определяет, сколько строк проходит через фильтр, и именно по этому показателю оптимизатор выбирает план запроса.
Сегодня в гайде:
• Как селективность влияет на выбор плана;
• Почему один и тот же запрос может работать по-разному на разных данных;
• Как устаревшая статистика приводит к “не тем” решениям оптимизатора.
Эта тема, помогает понимать реальные причины поведения плана.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤7🔥7🤝1
QUALIFY: фильтрация после оконных функций!
Иногда нужно фильтровать строки после вычисления оконных функций. В большинстве диалектов SQL для этого нужен подзапрос, но в ряде СУБД (Snowflake, BigQuery, Teradata, Oracle 23c) есть конструкция
Отбираем строки только с первым местом внутри категории:
Фильтруем строки, где разница с предыдущим значением больше 50:
Оставляем топ-3 самых больших заказов каждого клиента:
🔥
➡️ SQL Ready | #практика
Иногда нужно фильтровать строки после вычисления оконных функций. В большинстве диалектов 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 помогает писать чище и короче, избавляя от лишних подзапросов. Особенно полезен в аналитических задачах с большим числом оконных функций.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍9❤7🤝1
Эта шпаргалка охватывает наиболее используемые функции PostgreSQL для получения текущего времени, извлечения компонентов дат, расчета интервалов, округления временных меток и преобразования Unix-времени. Подходит для разработки систем, где критична точная и предсказуемая работа с временными значениями.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14🔥8👍7🤝2
This media is not supported in your browser
VIEW IN TELEGRAM
Сайт с огромной коллекцией задач по программированию, от самых простых до тех, что реально заставят подумать.
Учиться можно на абсолютно любом языке. Отличный способ подтянуть логику, научиться писать аккуратный код и подготовиться к собесам.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18👍13🔥9
RETURNING: получение данных прямо из DML!
Во многих СУБД (например, PostgreSQL, Oracle и др.) оператор
Вставляем строку и сразу получаем созданный
Обновляем запись и возвращаем изменённое значение:
Удаляем строку и получаем данные до удаления:
Возвращаем множество строк:
🔥
➡️ SQL Ready | #практика
Во многих СУБД (например, 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.Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤10🔥7
В производительных системах реальный
UX определяется не средним временем ответа, а редкими хвостовыми задержками, из-за которых важны именно p95 и p99.Сегодня в задаче:
• Посчитаем ключевые перцентильные метрики (p50/p95/p99) по каждому маршруту;
• Определим, какие запросы регулярно превышают собственный p99;
• Увидим, какие эндпоинты “убивают” отклик сервиса под нагрузкой;
Такой анализ помогает быстро находить узкие места
API и контролировать качество работы системы.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤11🔥8
ALL и ANY в SQL — учимся использовать для сравнения с подзапросами!
Эти операторы предназначены для сравнения результатов одного
Представим, что нам нужно найти все продукты, цена которых выше, чем цена любого продукта в категории
Теперь найдем всех клиентов, заказавших хотя бы один продукт с ценой выше 1000 рублей:
И найдем всех клиентов, которые заказывали продукты из определенной категории:
🔥 Но помните, что использование
➡️ SQL Ready | #практика
Эти операторы предназначены для сравнения результатов одного
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 возможно только с подзапросами и может быть неэффективным, если подзапрос возвращает большое количество строк.Please open Telegram to view this post
VIEW IN TELEGRAM
🤝17👍9🔥9❤2