This media is not supported in your browser
VIEW IN TELEGRAM
🚀 ХИТРЫЙ SQL-СОВЕТ ПО ОПТИМИЗАЦИИ ЗАПРОСОВ
Одна из самых скрытых тормозящих привычек - везде писать SELECT *. Ты тащишь лишние колонки, ломаешь использование покрывающих индексов и нагружаешь память. Гораздо эффективнее выбирать только те поля, которые реально нужны в ответе, и делать по ним составной индекс. Тогда база может обслужить запрос прямо из индекса, без чтения таблицы с диска. Подписывайся, больше фишек каждый день !
Одна из самых скрытых тормозящих привычек - везде писать SELECT *. Ты тащишь лишние колонки, ломаешь использование покрывающих индексов и нагружаешь память. Гораздо эффективнее выбирать только те поля, которые реально нужны в ответе, и делать по ним составной индекс. Тогда база может обслужить запрос прямо из индекса, без чтения таблицы с диска. Подписывайся, больше фишек каждый день !
-- плохой вариант: тянем все колонки
SELECT *
FROM orders
WHERE customer_id = 42
AND status = 'PAID';
-- лучше: только нужные поля (можно сделать covering index)
SELECT id, total_amount, paid_at
FROM orders
WHERE customer_id = 42
AND status = 'PAID';
👍15❤2💊2🔥1
Что делает параметр query_cache_type в MySQL?
Anonymous Quiz
33%
Включает или отключает кэширование результатов запросов
25%
Определяет размер кэша для индексов
16%
Управляет кэшированием соединений
27%
Настраивает кэширование данных таблиц
Эта статья - не про «как написать
SELECT, а про настоящую инженерную работу: принципы нормализации, дизайн схем, практики оптимизации SQL, работа с транзакциями, и главное - как выбрать и использовать ORM так, чтобы он помогал, а не мешал.Если тебе нужен инструмент, который выдержит рост проекта и не взорвётся через год, здесь ты найдёшь системный подход, проверенные шаблоны и практические примеры, которым уже доверяют зрелые инженерные команды.
Готовы? Тогда начинаем строить архитектуру, которую не стыдно масштабировать.
https://uproger.com/sql-bolshoj-gajd-kak-pravilno-vybrat-orm/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4❤2👍2😁1
🔐 Postgresus - self-hosted инструмент для резервного копирования и мониторинга PostgreSQL базы данных
🔥 Возможности:
- создание бекапов по расписанию для PostgreSQL 13-18;
- уведомления в Telegram, Slack, Discord, если бекап сломался или база недоступна;
- хранение бекапов локально, в S3 или Google Drive;
- health check базы данных раз в минуту;
- Apache 2.0 лицензия (полностью открытый);
Запуск через Docker:
📌 GitHub
🔥 Возможности:
- создание бекапов по расписанию для PostgreSQL 13-18;
- уведомления в Telegram, Slack, Discord, если бекап сломался или база недоступна;
- хранение бекапов локально, в S3 или Google Drive;
- health check базы данных раз в минуту;
- Apache 2.0 лицензия (полностью открытый);
Запуск через Docker:
docker run -d
--name postgresus
-p 4005:4005
-v ./postgresus-data:/postgresus-data
--restart unless-stopped
rostislavdugin/postgresus:latest
📌 GitHub
🔥7👍4❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Когда нужно взять по одному самому свежему событию на пользователя, не делай вложенные подзапросы с MAX и лишние JOIN, используй оконную функцию ROW_NUMBER по разделу и упорядочиванию, так запрос будет понятнее и часто быстрее на реальных данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥3🥱1
Self-Hosted vs Managed PostgreSQL
Облачный провайдер Cloud.ru приглашает на вебинар 9 декабря в 11:00 по мск, где честно сравнят два подхода в управлении базами данных и разберут, с какими сложностями можно столкнуться при переходе на Managed PostgreSQL и как их избежать.
А в практической части будут создавать кластер с нуля с демонстрацией всех этапов настройки и подключения.
Зарегистрироваться
Облачный провайдер Cloud.ru приглашает на вебинар 9 декабря в 11:00 по мск, где честно сравнят два подхода в управлении базами данных и разберут, с какими сложностями можно столкнуться при переходе на Managed PostgreSQL и как их избежать.
В программе:😶🌫️ в чем ключевые отличия в эксплуатации Self-Hosted и Managed PostgreSQL😶🌫️ какие задачи полностью автоматизирует облачный провайдер, а что остается под вашим контролем даже в managed-сервисе😶🌫️ как быстро развернуть отказоустойчивый кластер Managed PostgreSQL в Cloud․ru и подключить к нему тестовое приложение
А в практической части будут создавать кластер с нуля с демонстрацией всех этапов настройки и подключения.
Зарегистрироваться
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ SQL: быстрый поиск по тексту без LIKE '%...%' !!!
Если в проде ты всё ещё ищешь по тексту через LIKE '%строка%', то рано или поздно упрёшься в медленные seq scan по всей таблице.
В PostgreSQL гораздо эффективнее сразу строить полнотекстовый индекс и искать через to_tsvector`/`tsquery.
Так запросы остаются понятными, а поиск по большим текстам начинает работать в разы быстрее.
Если в проде ты всё ещё ищешь по тексту через LIKE '%строка%', то рано или поздно упрёшься в медленные seq scan по всей таблице.
В PostgreSQL гораздо эффективнее сразу строить полнотекстовый индекс и искать через to_tsvector`/`tsquery.
Так запросы остаются понятными, а поиск по большим текстам начинает работать в разы быстрее.
CREATE TABLE articles (
id serial PRIMARY KEY,
noscript text,
body text
);
CREATE INDEX idx_articles_fts
ON articles
USING gin (to_tsvector('russian',
coalesce(noscript,'') ' ' coalesce(body,'')));
SELECT id, noscript
FROM articles
WHERE to_tsvector('russian',
coalesce(noscript,'') ' ' coalesce(body,''))
@@ plainto_tsquery('russian', 'sql поиск производительность');
🔥6❤3👍2
🚀 Обрабатывайте данные больше объёма RAM с автоматическим spillover в DuckDB
Обычно, когда датасет превышает доступную память, инструменты падают или требуют ручного чанкинга и дорогого железа.
DuckDB решает проблему иначе:
он автоматически сбрасывает промежуточные данные на диск, если памяти не хватает.
Пример:
Итог:
- у вас 10GB Parquet
- оперативка только 500MB
- DuckDB сам делает чанки + сбрасывает overflow на диск
- запрос успешно выполняется ✔
Так вы работаете с большими данными без сложных пайплайнов и апгрейда железа.
Обычно, когда датасет превышает доступную память, инструменты падают или требуют ручного чанкинга и дорогого железа.
DuckDB решает проблему иначе:
он автоматически сбрасывает промежуточные данные на диск, если памяти не хватает.
Пример:
duckdb.sql("SET memory_limit = '500MB'")
duckdb.sql("SET temp_directory = '/tmp/duckdb_temp'")
result = duckdb.sql(f"SELECT * FROM '{parquet_path}'").df()
Итог:
- у вас 10GB Parquet
- оперативка только 500MB
- DuckDB сам делает чанки + сбрасывает overflow на диск
- запрос успешно выполняется ✔
Так вы работаете с большими данными без сложных пайплайнов и апгрейда железа.
❤4🥰1
⚡️ SQL-совет:
Используйте filtered indexes (условные индексы) - они ускоряют выборки на больших таблицах, но мало кто о них знает.
Пример для таблицы заказов, где статус "active" запрашивается чаще всего:
Плюсы:
- индекс меньше → быстрее в памяти,
- оптимизатор выбирает его при типичных запросах,
- запросы по активным записям работают значительно быстрее.
Мало кто использует условные индексы, а зря. Они умеют избавлять от лишних full scan почти бесплатно.
Используйте filtered indexes (условные индексы) - они ускоряют выборки на больших таблицах, но мало кто о них знает.
Пример для таблицы заказов, где статус "active" запрашивается чаще всего:
CREATE INDEX idx_orders_active
ON orders(status)
WHERE status = 'active';
Плюсы:
- индекс меньше → быстрее в памяти,
- оптимизатор выбирает его при типичных запросах,
- запросы по активным записям работают значительно быстрее.
Мало кто использует условные индексы, а зря. Они умеют избавлять от лишних full scan почти бесплатно.
👍10❤4🔥4
🎯 SQL хитрый трюк, который реально экономит время
Когда выбираешь строки с максимумом/минимумом - не делай два запроса.
Получай значение и саму строку одной командой с оконной функцией:
Что это даёт?
Не нужно сначала находить MAX(amount), а потом искать строку с этим значением.
Один запрос — меньше нагрузки, быстрее читается.
Работает для любых ранжирований: топ-N, bottom-N, лидеры, фильтрации по метрикам.
Меняешь DESC → ASC и получаешь минимум.
А если нужен топ-5 — просто ROW_NUMBER заменяешь на RANK или ограничиваешь < 5.
Быстро, чисто, без лишних подзапросов.
Когда выбираешь строки с максимумом/минимумом - не делай два запроса.
Получай значение и саму строку одной командой с оконной функцией:
SELECT *
FROM sales
QUALIFY ROW_NUMBER() OVER (ORDER BY amount DESC) = 1;
Что это даёт?
Не нужно сначала находить MAX(amount), а потом искать строку с этим значением.
Один запрос — меньше нагрузки, быстрее читается.
Работает для любых ранжирований: топ-N, bottom-N, лидеры, фильтрации по метрикам.
Меняешь DESC → ASC и получаешь минимум.
А если нужен топ-5 — просто ROW_NUMBER заменяешь на RANK или ограничиваешь < 5.
Быстро, чисто, без лишних подзапросов.
🔥18👍5❤2👀2
Forwarded from Machinelearning
Media is too big
VIEW IN TELEGRAM
Компания опубликовала отчет «The state of enterprise AI», который указывает на масштабную трансформацию бизнес-процессов под влиянием ИИ. База корпоративных клиентов превысила 1 миллион организаций, а число Enterprise-мест за год выросло в 9 раз.
Главным трендом стало качественное изменение сценариев использования: потребление ризонинг-токенов подскочило на 320%. Это говорит о том, что бизнес перешел от простых чат-ботов к решению многоступенчатых инженерных и аналитических задач.
Статистика выявила четкую корреляцию между глубиной погружения в технологии и продуктивностью. Сотрудники, использующие GPT-5 Thinking и Deep Research, экономят более 10 часов в неделю, при этом потребляя в 8 раз больше ресурсов модели, чем обычные пользователи. Особенно заметен разрыв в разработке: там генерируют код через ИИ в 17 раз активнее.
openai.com
Model Context Protocol передан организации Agentic AI Foundation, действующей в структуре Linux Foundation. Это стратегический шаг: технология универсального стандарта для подключения ИИ-моделей к внешним базам данных и инструментам, теперь гарантированно останется нейтральной и открытой. Соучредителями нового фонда вместе с Anthropic выступили OpenAI и Block, а поддержку инициативе оказывают Google, Microsoft и AWS.
За год существования MCP добился массовости: протокол используют ChatGPT, Gemini, Claude и VS Code, а число загрузок SDK превысило 97 млн. Переход под эгиду Linux Foundation ставит MCP в один ряд с Kubernetes и PyTorch. Теперь развитие стандарта будет определяться сообществом, что важно для создания совместимой экосистемы ИИ-агентов.
anthropic.com
Власти КНР планируют ввести строгие ограничения на доступ и эксплуатацию Nvidia H200. Это решение готовится на фоне одобрения экспорта данных чипов со стороны администрации США. Несмотря на неожиданный «зеленый свет» из Вашингтона, Пекин демонстрирует осторожность в вопросах использования зарубежного железа.
Конкретные детали и механизмы новых барьеров пока не обнародованы. МИД Китая в ответ на запросы ограничился стандартным заявлением о важности взаимовыгодного сотрудничества, не прояснив судьбу поставок.
ft.com
Google официально подтвердила планы по запуску линейки смарт-очков с ИИ в 2026 году. Техногигант намерен потеснить Марка Цукерберга на этом рынке, объединив усилия с Samsung, Warby Parker и корейским фешн-брендом Gentle Monster.
В разработке находятся 2 типа устройств. Первый вариант - оправа с аудиосистемой для голосового взаимодействия с ИИ, второй - модель с встроенными дисплеями для навигации и перевода в реальном времени. Чтобы сохранить вес и габариты на уровне обычных очков, инженеры решили перенести основную вычислительную нагрузку на сопряженный смартфон.
cnbc.com
В EPFL предложили неожиданное решение для робототехники: использование пищевых отходов в качестве готовых экзоскелетов. В рамках концепции, которую авторы назвали «робототехникой мертвой материи», панцири лобстеров перерабатываются в функциональные механические узлы.
Процесс создания био-гибридов состоит из заполнения оболочки мягким эластомером, установку приводов и покрытия конструкции силиконом, а природная структура панциря обеспечивает идеальный баланс прочности и гибкости. Опытные образцы смогли поднимать вес до 500 граммов и выполнять захват помидора без повреждений.
Инновация решает сразу две задачи: снижает стоимость производства и уменьшает углеродный след, превращая отходы в ресурсы.
news.epfl.ch
@ai_machinelearning_big_data
#news #ai #ml
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🤓2👍1
⚠️ SQL-совет по безопасности, который игнорируют даже опытные разработчики
Никогда не собирайте SQL-запросы через конкатенацию строк
(особенно когда добавляете параметры типа WHERE name = '" + user + "'").
Так вы открываете дверь для SQL-инъекций, даже если “данные вроде чистые”.
✔ Всегда используйте параметризованные запросы или prepared statements —
они экранируют данные, а движок БД понимает структуру отдельно от значений.
Пример безопасного подхода:
передаете значение отдельно.
🧠 Бонус: параметризация улучшает кеширование запросов и часто ускоряет работу БД.
Никогда не собирайте SQL-запросы через конкатенацию строк
(особенно когда добавляете параметры типа WHERE name = '" + user + "'").
Так вы открываете дверь для SQL-инъекций, даже если “данные вроде чистые”.
✔ Всегда используйте параметризованные запросы или prepared statements —
они экранируют данные, а движок БД понимает структуру отдельно от значений.
Пример безопасного подхода:
SELECT * FROM users WHERE email = ?
передаете значение отдельно.
🧠 Бонус: параметризация улучшает кеширование запросов и часто ускоряет работу БД.
👍11❤2💊2🔥1
Что возвращает функция pg_backend_pid()?
Anonymous Quiz
9%
A) Идентификатор текущего пользователя
80%
B) Идентификатор процесса сервера, обслуживающего сессию
7%
C) Версию PostgreSQL
4%
D) Имя базы данных
В этом руководстве мы рассмотрим ключевые аспекты работы с SQL на практике. Начнём с сравнения популярных СУБД, затем перейдём к продвинутым приёмам аналитического SQL, оптимизации запросов, администрированию баз данных, и закончится всё интеграцией SQL с Python (SQLAlchemy, pandas и т.д.).
Для каждого раздела приведены примеры на реальных сценариях (интернет-магазин, CRM, аналитика продаж), код и полезные советы.
👉 Читать гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤4🔥1
usql — это интерактивный SQL-клиент, который объединяет работу с разными СУБД в одном инструменте. По ощущениям он похож на psql, но поддерживает сразу множество баз данных и не привязывает тебя к одному движку.
Главная идея usql — один клиент для всех SQL-баз.
Что умеет usql:
- Подключение к PostgreSQL, MySQL, SQLite, MSSQL, Oracle, ClickHouse, CockroachDB, MariaDB и другим СУБД
- Единый интерфейс и одинаковые команды для разных движков
- Интерактивный режим с историей команд и автодополнением
- Удобный табличный вывод результатов
- Запуск SQL-скриптов из файлов
- Гибкая настройка цветов, форматов и pager’а
Почему это удобно:
- Не нужно держать десяток разных клиентов
- Не нужно переключать мышление между psql, mysql и sqlcmd
- Один привычный REPL для аналитики и администрирования
- Отлично подходит для работы сразу с несколькими базами
Кому особенно полезен usql:
- backend-разработчикам
- аналитикам данных
- DevOps-инженерам
- всем, кто регулярно работает с разными СУБД
Если ты живёшь в терминале и часто общаешься с SQL-базами, usql быстро становится инструментом по умолчанию.
github.com/xo/usql/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3
💡Полезный SQL-совет
Если тебе нужно быстро проверить существование строк - никогда не используй `COUNT(*)`.
❌ Плохо:
✅ Правильно:
Меньше I/O, меньше CPU, быстрее запрос.
Если тебе нужно быстро проверить существование строк - никогда не используй `COUNT(*)`.
❌ Плохо:
SELECT COUNT(*) FROM orders WHERE user_id = 42;
✅ Правильно:
SELECT 1 FROM orders WHERE user_id = 42 LIMIT 1;
Почему:
- `COUNT(*)` считает все строки
- `EXISTS` / `LIMIT 1` останавливаются на первом совпадении
- На больших таблицах разница — кратная
Лучший вариант:
SELECT EXISTS (
SELECT 1 FROM orders WHERE user_id = 42
);
Меньше I/O, меньше CPU, быстрее запрос.
👍13❤7💊1
This media is not supported in your browser
VIEW IN TELEGRAM
🛠️ Легкий TUI для работы с SQL базами данных
sqlit - это удобный инструмент для быстрого выполнения запросов к различным SQL базам данных, включая PostgreSQL, MySQL, SQLite и другие. Он предлагает интуитивно понятный интерфейс, позволяя легко управлять соединениями и историей запросов без необходимости в сложных настройках.
🚀Основные моменты:
- Поддержка множества баз данных без дополнительных адаптеров
- Удобный интерфейс для управления соединениями
- Встроенная история запросов с возможностью поиска
- Поддержка SSH туннелей для безопасного подключения
- Редактирование в стиле Vim для терминальных пользователей
📌 GitHub: https://github.com/Maxteabag/sqlit
#python
sqlit - это удобный инструмент для быстрого выполнения запросов к различным SQL базам данных, включая PostgreSQL, MySQL, SQLite и другие. Он предлагает интуитивно понятный интерфейс, позволяя легко управлять соединениями и историей запросов без необходимости в сложных настройках.
🚀Основные моменты:
- Поддержка множества баз данных без дополнительных адаптеров
- Удобный интерфейс для управления соединениями
- Встроенная история запросов с возможностью поиска
- Поддержка SSH туннелей для безопасного подключения
- Редактирование в стиле Vim для терминальных пользователей
📌 GitHub: https://github.com/Maxteabag/sqlit
#python
❤3👍2🔥1
DISTINCT ON часто недооценивают, но в PostgreSQL это один из самых быстрых способов выбрать «последнюю запись на группу» без подзапросов и оконных функций.
Проблема
Нужно получить, например, последнюю запись по каждому user_id, отсортированную по created_at.
Типичное (медленное) решение
- оконная функция ROW_NUMBER()
- подзапрос с GROUP BY + JOIN
Редкое и очень быстрое решение
DISTINCT ON + индекс, совпадающий с ORDER BY.
Пример
Получаем последнюю сессию каждого пользователя.
SELECT DISTINCT ON (user_id)
user_id,
session_id,
created_at
FROM user_sessions
ORDER BY user_id, created_at DESC;
Почему это быстро
PostgreSQL берет первую строку на каждую группу user_id согласно ORDER BY и сразу останавливается - без сортировки всего результата и без оконных функций.
Ключевой момент оптимизации
Нужен правильный индекс, иначе магия не сработает.
CREATE INDEX idx_user_sessions_distinct
ON user_sessions (user_id, created_at DESC);
Что дает такой индекс
- Index Scan вместо Seq Scan
- Нет дополнительной сортировки
- Очень быстрый выбор «последней записи на группу» даже на миллионах строк
Где особенно полезно
- логины пользователей
- события
- статусы
- версии сущностей
- time-series данные
DISTINCT ON - это PostgreSQL-специфичная оптимизация, но если ты работаешь с Postgres, это один из самых мощных и редких трюков.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤3👍3
Одна из самых коварных SQL-ошибок возникает при использовании LEFT JOIN вместе с условиями в WHERE.
Типичная ситуация:
Ты делаешь LEFT JOIN, чтобы сохранить строки из основной таблицы,
а потом незаметно превращаешь его в INNER JOIN.
Почему так происходит
Если в WHERE есть условие на колонку из присоединенной таблицы,
строки с NULL автоматически отфильтровываются.
В итоге:
- LEFT JOIN есть
- но результат как у INNER JOIN
- данные «пропадают», и баг сложно заметить
Правильное правило
Все условия для таблицы из LEFT JOIN:
- должны быть в ON
- а не в WHERE
Иначе ты теряешь строки, где JOIN не сработал.
Когда это особенно опасно
- отчеты и аналитика
- подсчет метрик
- поиск «отсутствующих» данных
- антиджойны
Эта ошибка не ломает запрос.
Она ломает доверие к данным.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍8❤1
Представь фэнтези-мир, где заклинания - это SQL-запросы, а древние артефакты спрятаны в таблицах и JSON-документах.
🧙Ты - боевой дата-аналитик, который с помощью SQL, Python, ETL и визуализаций охотится за харизматичным злодеем Архивариусом Пакостусом, что ломает индексы, крадёт данные и готовит “шторм данных” на столицу.🔮
В каждом эпизоде тебя ждут: выборы с последствиями, хитрые задачи от простых SELECT до рекурсивных CTE и BigQuery, юмор, эпик и неожиданные повороты.
Хочешь проверить, сможешь ли ты спасти королевство не мечом, а запросами? Тогда добро пожаловать в SQL-квест.
🪄 Начать квест: https://uproger.com/sql-kvest-fentezijnoe-priklyuchenie-dlya-analitikov-dannyh/
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13🔥10👍2⚡1😁1