SQL Portal | Базы Данных
14.6K subscribers
722 photos
95 videos
41 files
582 links
Присоединяйтесь к нашему каналу и погрузитесь в мир баз данных

Связь: @devmangx

РКН: https://clck.ru/3H4Wo3
Download Telegram
Вышел бесплатный онлайн-плейграунд для SQL — RunSQL.

Сервис позволяет создавать таблицы, писать запросы и делиться результатами с командой. Поддерживаются MySQL, PostgreSQL и SQL Server.

Работает прямо из браузера, ничего устанавливать не нужно: https://runsql.com/r

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍2
Индексы covering дают серьезный прирост производительности, если использовать их правильно

Covering index это индекс, который покрывает все колонки, нужные для результата запроса, без обращения к основной таблице. В Postgres это значит, что можно обойтись без table heap, а в MySQL без обращения к clustered index данных таблицы

Например, запрос:

SELECT name, email
FROM user
WHERE name > 'C' AND name < 'G';


Если есть индекс только по name

CREATE INDEX idx_name
ON your_table (name);


База сможет использовать индекс для фильтрации, но всё равно придется искать email в основной таблице

Если же создать составной индекс

CREATE INDEX idx_name_email
ON your_table (name, email);


То все нужные колонки уже есть в индексе, и запрос отрабатывает быстрее

Минус в том, что индекс становится больше. Классический компромисс между пространством и временем

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍1
Простое объяснение соединений в базах данных:

Соединения позволяют связывать разные таблицы на основе их отношений.

Они особенно полезны, когда нужно получить данные из нескольких таблиц одновременно.

Основные типы соединений:

1. Inner Join – возвращает только те строки, которые совпадают в обеих таблицах.
2. Left (Outer) Join – возвращает все строки из левой таблицы и только совпадающие строки из правой.

Другие виды соединений:

- Self Join – соединение таблицы самой с собой.
- Outer Join – включает все строки из обеих таблиц с учетом совпадений и неполных данных.
- Cross Join – декартово произведение двух таблиц, каждая строка первой таблицы соединяется со всеми строками второй.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍114🤯2
Фича Postgres 18: дамп статистики таблиц

В Postgres 18 появится возможность использовать pg_dump --statistics-only и --with-statistics

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Если ты пишешь сложные вложенные подзапросы, лучше использовать CTE , чтобы улучшить читаемость

CTE позволяет определить запрос и работать с его результатом как с новой таблицей, организуя логику в иерархическую структуру.

@SQLPortal
15😁4👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Новый уровень баз данных

Turso это впечатляющий технический проект. Это переписанный на Rust SQLite с архитектурой async-first, готовящейся поддержкой конкурентных записей, векторным поиском и встроенной поддержкой браузера / WASM.

Есть все шансы, что он станет фундаментальной частью инфраструктуры «vibe-coding» эпохи: on-demand, глобальные базы данных, совместимые с SQLite, которые можно запускать как в браузере, так и локально на устройстве.

Скорость, с которой развивается проект, это явно что-то необычное. 🐱

Демо: shell.turso.tech

@SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
4
PostgreSQL получил полезное обновление для разработчиков

Теперь блокировка FOR NO KEY UPDATE официально помогает избегать проблем с параллельной вставкой в дочерние таблицы.

Ранее использование классического FOR UPDATE на родительской записи могло блокировать добавление связанных строк, например комментариев к посту. С FOR NO KEY UPDATE родительскую запись можно защищать от изменений, не мешая вставке дочерних данных. Это ускоряет работу баз и повышает параллельность операций, особенно в сложных схемах с внешними ключами.

Подробнее о механике и примерах использования можно почитать на блоге Владислава Михалчева

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥4
Объединяем строки по значению в SQL

Для этого используется GROUP BY col.

Он возвращает по одной строке для каждого уникального значения в колонке col.

После этого можно применять агрегатные функции, чтобы получить сводные данные по каждой группе:

COUNT — количество строк

AVG — среднее числовое значение

MIN/MAX — минимальное и максимальное значения

LISTAGG — список значений

Простой способ быстро агрегировать данные и видеть сводную информацию по каждой группе.

@SQLPortal
4👍4
Совет для psql: \dn — показывает все схемы.

Часто вы подключаетесь к базе данных в схеме по умолчанию или в public. Команда \dn позволяет увидеть другие схемы.

Схема является частью поискового пути psql (search_path), поэтому чтобы сменить схему, нужно изменить поисковый путь:

SET search_path TO new_schema;


👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Функция NVL в Oracle SQL возвращает:

первый аргумент, если он не NULL

иначе — второй аргумент

Пример использования:

WHERE col = NVL(:var, col)


План выполнения может использовать индекс, если :var не NULL,
и full table scan, если :var равен NULL.

Демо у Monika Mitura

@SQLPortal
👍6
Полный курс по SQL от основ до продвинутого уровня

Репозиторий SQL-Tutorials от разработчика GowthamRaj K представляет собой обширный ресурс для изучения SQL, идеально подходящий для начинающих и тех, кто хочет систематизировать свои знания.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73
Новый уровень облачного администрирования

Команда Yandex Cloud запустила AI-ассистентов для работы с базами данных. Теперь можно управлять базами данных YDB, Trino, ClickHouse, PostgreSQL и другими с помощью AI-ассистентов.

ИИ-ассистент в YDB поможет провести диагностику, оптимизировать работу с базами данных и предложить варианты более эффективной работы с БД. Также для других задач можно подключить к YDB нейросети через MCP-сервер.

В WebSQL ИИ-помощник может генерировать запросы к базам данных по запросу пользователя на естественном языке. Также на платформе можно автоматически разметить метаданные через Data Catalog.

Есть все шансы, что это станет стандартом управления облаком: вместо ручной настройки — диалог в чате с готовой конфигурацией.

@SQLPortal
4👍3
PostgreSQL испытывает трудности при росте числа подключений

Даже умеренное количество клиентов может «сломать» PostgreSQL. Причина в том, как СУБД обрабатывает каждое соединение.

При подключении нового клиента процесс postmaster создаёт отдельный бэкенд-процесс (не поток) для работы с сессией. Этот процесс поддерживает соединение до отключения клиента или потери соединения.

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

Решение — использовать пул соединений, например, pg_bouncer. Менеджер пула держит заранее созданные соединения с базой и выдаёт их клиентам по мере необходимости, вместо того чтобы создавать новое соединение для каждого запроса. Это позволяет обслуживать больше клиентов при меньшем количестве соединений к базе.

Интересный факт, существует предложение перевести PostgreSQL на многопоточную модель вместо текущей многопроцессной, что потенциально могло бы решить проблему масштабируемости.

Детальный разбор того, как PostgreSQL управляет соединениями

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥42
Создавайте 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"


Эти параметры:

- разрешают INSERT,
- запрещают UPDATE,
- запрещают DELETE/DROP до истечения заданного количества дней (N).

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
4
This media is not supported in your browser
VIEW IN TELEGRAM
Postgres: процесс-на-соединение

MySQL: поток-на-соединение

Узнайте больше о процессах, потоках, пуле соединений и о том, как они влияют на производительность базы данных — читать

@SQLPortal
8
На GitHub появился новый проект SQLBot — база данных без SQL. 😱

Всего за несколько дней он собрал 1.5K ★

SQLBot умеет отвечать на вопросы на естественном языке, поддерживает MySQL, SQL Server, ClickHouse, RedShift и даже Excel/CSV.

Встроена авто-визуализация, прогнозы и простая установка через Docker.

SQLBot на GitHub

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Индексирование полнотекстового поиска с подстановочными символами в Postgres? Вот практическое видео, которое показывает, как использовать pg_trgm и GIN-индексы

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍4
Бесплатный курс по SQL от Baraa Khatib Salkini, известного как DataWithBaraa. Курс охватывает всё от основ до сложных запросов и реальных проектов. 🤑

В GitHub-репозитории есть datasets/ с реальными данными из ERP и CRM, scripts/ с готовыми SQL-скриптами для практики и docs/ с документацией и материалами курса.

Ссылка на курс

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥3
Совет для Postgres: используйте jsonb_pretty, чтобы выводить JSON в удобочитаемом вертикальном виде.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍3
Типы связей в базах данных:

Связи показывают, как данные между собой связаны.

Три основных типа связей:

Один к одному (One-to-One) —> запись в одной таблице связана с одной записью в другой таблице.

Один ко многим (One-to-Many) —> запись в одной таблице связана с несколькими записями в другой таблице.

Многие ко многим (Many-to-Many) —> записи в обеих таблицах могут быть связаны с несколькими записями в другой таблице.

👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍3