14500
Присоединяйтесь к нашему каналу и погрузитесь в мир баз данных Связь: @devmangx РКН: https://clck.ru/3H4Wo3
Бесплатный курс по SQL от Baraa Khatib Salkini, известного как DataWithBaraa. Курс охватывает всё от основ до сложных запросов и реальных проектов. 🤑
В GitHub-репозитории есть datasets/ с реальными данными из ERP и CRM, scripts/ с готовыми SQL-скриптами для практики и docs/ с документацией и материалами курса.
Ссылка на курс
👉 @SQLPortal
На GitHub появился новый проект SQLBot — база данных без SQL. 😱
Всего за несколько дней он собрал 1.5K ★
SQLBot умеет отвечать на вопросы на естественном языке, поддерживает MySQL, SQL Server, ClickHouse, RedShift и даже Excel/CSV.
Встроена авто-визуализация, прогнозы и простая установка через Docker.
SQLBot на GitHub
👉 @SQLPortal
PostgreSQL 18 уже в Yandex Cloud
Вчера вышла новая версия PostgreSQL 18, и сразу же она стала доступна в Yandex Cloud. Можно пробовать и в продакшене, без ожиданий.
Что нового и полезного для работы с запросами:
✔️ Async I/O — чтение до 3 раза быстрее;
✔️ Skip scan для b-tree индексов — быстрее выборки даже по части полей;
✔️ UUIDv7 — идентификаторы с временными метками, удобнее и надёжнее.
👉 Поддерживаются все актуальные версии, апдейты приходят day-one.
👉 @SQLPortal | #PostgreSQL #новости
Новости: Выпущен PostgreSQL 18!
https://www.postgresql.org/about/news/postgresql-18-released-3142/
👉 @SQLPortal
Новый уровень облачного администрирования
Команда Yandex Cloud запустила AI-ассистентов для работы с базами данных. Теперь можно управлять базами данных YDB, Trino, ClickHouse, PostgreSQL и другими с помощью AI-ассистентов.
ИИ-ассистент в YDB поможет провести диагностику, оптимизировать работу с базами данных и предложить варианты более эффективной работы с БД. Также для других задач можно подключить к YDB нейросети через MCP-сервер.
В WebSQL ИИ-помощник может генерировать запросы к базам данных по запросу пользователя на естественном языке. Также на платформе можно автоматически разметить метаданные через Data Catalog.
Есть все шансы, что это станет стандартом управления облаком: вместо ручной настройки — диалог в чате с готовой конфигурацией.
@SQLPortal
Функция NVL в Oracle SQL возвращает:
первый аргумент, если он не NULL
иначе — второй аргумент
Пример использования:
WHERE col = NVL(:var, col)
:var не NULL,full table scan, если :var равен NULL.
Объединяем строки по значению в SQL
Для этого используется GROUP BY col.
Он возвращает по одной строке для каждого уникального значения в колонке col.
После этого можно применять агрегатные функции, чтобы получить сводные данные по каждой группе:
COUNT — количество строк
AVG — среднее числовое значение
MIN/MAX — минимальное и максимальное значения
LISTAGG — список значений
Простой способ быстро агрегировать данные и видеть сводную информацию по каждой группе.
@SQLPortal
Новый уровень баз данных
Turso это впечатляющий технический проект. Это переписанный на Rust SQLite с архитектурой async-first, готовящейся поддержкой конкурентных записей, векторным поиском и встроенной поддержкой браузера / WASM.
Есть все шансы, что он станет фундаментальной частью инфраструктуры «vibe-coding» эпохи: on-demand, глобальные базы данных, совместимые с SQLite, которые можно запускать как в браузере, так и локально на устройстве.
Скорость, с которой развивается проект, это явно что-то необычное. 🐱
Демо: shell.turso.tech
@SQLPortal
Фича Postgres 18: дамп статистики таблиц
В Postgres 18 появится возможность использовать pg_dump --statistics-only и --with-statistics
👉 @SQLPortal
Индексы covering дают серьезный прирост производительности, если использовать их правильно
Covering index это индекс, который покрывает все колонки, нужные для результата запроса, без обращения к основной таблице. В Postgres это значит, что можно обойтись без table heap, а в MySQL без обращения к clustered index данных таблицы
Например, запрос:
SELECT name, email
FROM user
WHERE name > 'C' AND name < 'G';
nameCREATE INDEX idx_name
ON your_table (name);
CREATE INDEX idx_name_email
ON your_table (name, email);
Консистентность «read-your-writes» означает, что любая запись, сделанная в базу данных, сразу становится доступной для чтения тем же клиентом.
Звучит очевидно, но бывают ситуации, когда это правило не выполняется, особенно при работе на больших масштабах.
На сервере с одной нодой это легко гарантировать при использовании последовательных транзакций.
В среде с primary и replica всё сложнее. Во многих базах данных все записи и часть чтений обрабатываются на primary, а большая часть чтений выполняется на репликах. Из-за задержки репликации может возникнуть ситуация, когда клиент записывает данные в базу и тут же пытается их прочитать с реплики, но записи там ещё нет.
Такое возможно при использовании асинхронной или полусинхронной репликации, так как они не требуют, чтобы все реплики получили данные до ответа клиенту. При синхронной репликации primary отвечает только после того, как все реплики подтвердят получение записи.
Если используется асинхронная или полусинхронная репликация, чтения на реплики лучше направлять только тогда, когда консистентность «read-your-writes» не критична.
👉 @SQLPortal
У Postgres есть огромное преимущество перед MySQL в плане поддержки транзакций.
Большинство операторов CREATE, ALTER и DROP в Postgres являются полноценными участниками многооператорных транзакций. Это означает, что их можно использовать между BEGIN и COMMIT, и все изменения либо успешно применяются, либо откатываются атомарно вместе со всеми другими операторами.
В MySQL это не так. Подобные операторы работают по модели неявного коммита: при выполнении CREATE, ALTER или DROP происходит автоматический коммит текущей транзакции.
Таким образом, в Postgres можно, например:
- создать таблицу и вставить в неё данные в рамках одного атомарного действия,
- атомарно изменить несколько таблиц.
👉 @SQLPortal
С oracle sql 25.2 теперь можно запускать MCP-серверы.
Они позволяют взаимодействовать с вашей Oracle Database через AI-агентов.
That Jeffsmith подготовил FAQ, который помогает понять, как это работает, включая:
• Работает ли это с 11g или 12c? Скорее всего, да
• Как сделать использование безопасным
👉 @SQLPortal
Нельзя понять производительность SQL-запроса просто по его коду. Для этого нужен план выполнения.
Пример:
select id from student where grade >= 99
Индексирование полнотекстового поиска с подстановочными символами в Postgres? Вот практическое видео, которое показывает, как использовать pg_trgm и GIN-индексы
👉 @SQLPortal
Postgres: процесс-на-соединение
MySQL: поток-на-соединение
Узнайте больше о процессах, потоках, пуле соединений и о том, как они влияют на производительность базы данных — читать
@SQLPortal
Создавайте blockchain-таблицы в Oracle Database с помощью
CREATE BLOCKCHAIN TABLE ... ( ... )
NO DROP UNTIL n DAYS IDLE
NO DELETE UNTIL n DAYS AFTER INSERT
HASHING USING SHA2_512 VERSION "v1"
PostgreSQL испытывает трудности при росте числа подключений
Даже умеренное количество клиентов может «сломать» PostgreSQL. Причина в том, как СУБД обрабатывает каждое соединение.
При подключении нового клиента процесс postmaster создаёт отдельный бэкенд-процесс (не поток) для работы с сессией. Этот процесс поддерживает соединение до отключения клиента или потери соединения.
С ростом числа клиентов сервер создаёт всё больше процессов. Каждый из них кеширует системные таблицы, подготовленные выражения, промежуточные результаты запросов и другие данные, что резко увеличивает потребление памяти.
Решение — использовать пул соединений, например, pg_bouncer. Менеджер пула держит заранее созданные соединения с базой и выдаёт их клиентам по мере необходимости, вместо того чтобы создавать новое соединение для каждого запроса. Это позволяет обслуживать больше клиентов при меньшем количестве соединений к базе.
Интересный факт, существует предложение перевести PostgreSQL на многопоточную модель вместо текущей многопроцессной, что потенциально могло бы решить проблему масштабируемости.
Детальный разбор того, как PostgreSQL управляет соединениями
👉 @SQLPortal
Полный курс по SQL от основ до продвинутого уровня
Репозиторий SQL-Tutorials от разработчика GowthamRaj K представляет собой обширный ресурс для изучения SQL, идеально подходящий для начинающих и тех, кто хочет систематизировать свои знания.
👉 @SQLPortal
Совет для psql: \dn — показывает все схемы.
Часто вы подключаетесь к базе данных в схеме по умолчанию или в public. Команда \dn позволяет увидеть другие схемы.
Схема является частью поискового пути psql (search_path), поэтому чтобы сменить схему, нужно изменить поисковый путь:
SET search_path TO new_schema;
PostgreSQL получил полезное обновление для разработчиков
Теперь блокировка FOR NO KEY UPDATE официально помогает избегать проблем с параллельной вставкой в дочерние таблицы.
Ранее использование классического FOR UPDATE на родительской записи могло блокировать добавление связанных строк, например комментариев к посту. С FOR NO KEY UPDATE родительскую запись можно защищать от изменений, не мешая вставке дочерних данных. Это ускоряет работу баз и повышает параллельность операций, особенно в сложных схемах с внешними ключами.
Подробнее о механике и примерах использования можно почитать на блоге Владислава Михалчева
👉 @SQLPortal
Если ты пишешь сложные вложенные подзапросы, лучше использовать CTE , чтобы улучшить читаемость
CTE позволяет определить запрос и работать с его результатом как с новой таблицей, организуя логику в иерархическую структуру.
@SQLPortal
Простое объяснение соединений в базах данных:
Соединения позволяют связывать разные таблицы на основе их отношений.
Они особенно полезны, когда нужно получить данные из нескольких таблиц одновременно.
Основные типы соединений:
1. Inner Join – возвращает только те строки, которые совпадают в обеих таблицах.
2. Left (Outer) Join – возвращает все строки из левой таблицы и только совпадающие строки из правой.
Другие виды соединений:
- Self Join – соединение таблицы самой с собой.
- Outer Join – включает все строки из обеих таблиц с учетом совпадений и неполных данных.
- Cross Join – декартово произведение двух таблиц, каждая строка первой таблицы соединяется со всеми строками второй.
👉 @SQLPortal
Вышел бесплатный онлайн-плейграунд для SQL — RunSQL.
Сервис позволяет создавать таблицы, писать запросы и делиться результатами с командой. Поддерживаются MySQL, PostgreSQL и SQL Server.
Работает прямо из браузера, ничего устанавливать не нужно: http://runsql.com/r
👉 @SQLPortal
Нашёлся интересный ресурс для тех, кто готовится к техническим собеседованиям: на нём собрано очень много практических SQL-вопросов из самых разных областей.
Есть задачи на работу с запросами, оптимизацию, подзапросы, агрегации и даже отдельный блок, посвящённый вопросам, встречающимся в интервью у компаний уровня FAANG. 🥸
👉 @SQLPortal
Внешние таблицы — отличный способ читать текстовые файлы в Oracle Database с помощью SQL.
Но что, если у тебя есть поля длиннее 4000 символов?
Anti Kyte разбирает:
I. Маппинг CHAR в ACCESS PARAMETERS на CLOB
II. Увеличение READSIZE
III. Использование big data driver
👉 @SQLPortal
Работа с SQL на больших данных — опыт перехода с 4 млн на 42 млн клиентов
Разработчик поделился историей. В новой компании с 42 млн пользователей его первый SQL-запрос «упал». Масштаб данных потребовал изменить подход.
Что изменилось
I. Дробление запросов
Вместо монолитных SQL-скриптов в 500 строк используются промежуточные staging-таблицы, пошаговая логика и CTE. Это помогает базе работать стабильнее и быстрее.
II. Разделение данных
Огромная таблица заменена на две структуры
- Current содержит только актуальный срез для быстрых дашбордов
- History хранит полную историю для комплаенса
Так удалось сбалансировать скорость и полноту.
III. Точность требований
Формулировки вроде «дайте все данные» больше не работают. Теперь разработчик уточняет какой период нужен, какие сегменты важны, какой бизнес-вопрос стоит за задачей.
При работе с десятками миллионов клиентов важно дробить запросы, разделять данные на текущие и архивные и добиваться конкретных требований. Такой подход ускоряет аналитику и снижает нагрузку на базы.
👉 @SQLPortal
Будьте осторожны при фильтрации внутренней таблицы в OUTER JOIN.
Например, правой таблицы в LEFT OUTER JOIN.
Если применить фильтр к ней в секции WHERE, то соединение фактически превращается в INNER JOIN.
Чтобы сохранить именно OUTER JOIN, фильтровать внутреннюю таблицу нужно в секции ON.
На схеме показан OUTER JOIN по числовой колонке с внутренними фильтрами.
👉 @SQLPortal
Для больших наборов данных использование LIMIT + OFFSET работает не всегда эффективно, особенно если значение OFFSET большое.
Вместо этого можно применять постраничную выборку на основе курсора, где фильтрация идёт по значениям сортировки.
Именно поэтому сервисы вроде GitHub используют такой подход к пагинации
👉 @SQLPortal