
Заказывайте в AI-каталоге - получайте скидку!
5% скидка на размещения в каналах, которые подобрал AI. Промокод: Telega AI
Подробнее

РегистрацияВойтиВойти
Скидка 3,5% на первые три заказа
Получите скидку на первые три заказа!
Зарегистрируйтесь и получите скидку 3,5% на первые рекламные кампании — промокод активен 7 дней.
6.3

Базы данных (Data Base)
5.0
6
На данном канале мы публикуем полезный материал по Базам Данных (Data Base).
Для кого полезен канал? Для программистов, администраторов баз данных.
На канал мы выкладываем видео, ссылки на обучающие статьи на русском и английском языке, шпаргалки, различные полезные скрипты и запросы к DB.
Поделиться
В избранное
Купить рекламу в этом канале
Формат:
keyboard_arrow_down
- 1/24
- 2/48
- 3/72
- Нативный
- 7 дней
- Репост
1 час в топе / 24 часа в ленте
Количество:
keyboard_arrow_down
- 1
- 2
- 3
- 4
- 5
- 8
- 10
- 15
Стоимость публикации:
local_activity
2 097.90₽2 097.90₽local_mall
0.0%
Осталось по этой цене:0
Последние посты канала
imageИзображение не доступно для предпросмотра
NoSQL vs SQL в реальных проектах
Краткий обзор
SQL (реляционные СУБД): данные хранятся в таблицах со строго заданной схемой (schema-on-write). Пример: PostgreSQL, MySQL, Oracle.
NoSQL (нереляционные СУБД): гибкие модели данных (документ, ключ–значение, граф, колоночные) и отсутствие жёсткой схемы (schema-on-read). Пример: MongoDB (документы), Redis (ключ–значение), Cassandra (колоночная), Neo4j (граф).
➡️ Читать статью
#db
👉 @database_info
Краткий обзор
SQL (реляционные СУБД): данные хранятся в таблицах со строго заданной схемой (schema-on-write). Пример: PostgreSQL, MySQL, Oracle.
NoSQL (нереляционные СУБД): гибкие модели данных (документ, ключ–значение, граф, колоночные) и отсутствие жёсткой схемы (schema-on-read). Пример: MongoDB (документы), Redis (ключ–значение), Cassandra (колоночная), Neo4j (граф).
#db
👉 @database_info
1700
11:25
03.06.2025
imageИзображение не доступно для предпросмотра
Индексы в PostgreSQL: когда и как ставить, чтобы ускорить запросы
🔍 Что такое индекс?
Индекс в PostgreSQL — это структура данных (обычно B-tree), позволяющая быстро находить строки по значению столбца, не сканируя всю таблицу.
⚙️ Пример создания простого B-tree-индекса
✅ Best Practices
1. Выбирай правильный тип
*
*
*
2. Индексируй часто фильтруемые и сортируемые поля
* WHERE, JOIN, ORDER BY.
* Например, для запросов типа
создаём составной индекс:
3. Не злоупотребляй
* Каждый индекс занимает место и замедляет INSERT/UPDATE/DELETE.
* Проанализируй
4. Используй частичные индексы
Если условие фильтрации редко меняется, можно сузить индекс:
5. Поддерживай актуальность
Периодически делай
❌ Антипаттерн: “Индекс на всё”
Создание индекса на каждый столбец:
Проблемы:
* Большой объём хранилища.
* Замедление DML-операций.
* Планы запросов могут пропускать некоторые индексы.
💡 Вывод
Правильно подобранные и настроенные индексы — ключ к быстрой работе базы. Сосредоточься на реально востребованных столбцах, комбинируй, не забывай про обслуживание.
Сохрани этот мини-гайд, чтобы не забыть, и поделись с коллегами: какие индексы стали для тебя открытием?
#db
👉 @database_info
🔍 Что такое индекс?
Индекс в PostgreSQL — это структура данных (обычно B-tree), позволяющая быстро находить строки по значению столбца, не сканируя всю таблицу.
⚙️ Пример создания простого B-tree-индекса
-- Ускоряем поиск по полю email
CREATE INDEX idx_users_email
ON users (email);
✅ Best Practices
1. Выбирай правильный тип
*
BTREE
— по умолчанию, для большинства операций сравнения (=
, <
, >
, BETWEEN
).*
GIN
/GiST
— для полнотекстового поиска (tsvector
), работы с массивами и геоданных.*
HASH
— для строго равенств (=
), но редко нужен.2. Индексируй часто фильтруемые и сортируемые поля
* WHERE, JOIN, ORDER BY.
* Например, для запросов типа
SELECT * FROM orders
WHERE user_id = 42
ORDER BY created_at DESC;
создаём составной индекс:
CREATE INDEX idx_orders_user_created
ON orders (user_id, created_at DESC);
3. Не злоупотребляй
* Каждый индекс занимает место и замедляет INSERT/UPDATE/DELETE.
* Проанализируй
pg_stat_user_indexes
и pg_stat_user_tables
через pg_stat_statements
перед добавлением.4. Используй частичные индексы
Если условие фильтрации редко меняется, можно сузить индекс:
CREATE INDEX idx_active_users_email
ON users (email)
WHERE active = true;
5. Поддерживай актуальность
Периодически делай
REINDEX
или VACUUM ANALYZE
для больших таблиц, чтобы индекс не фрагментировался.❌ Антипаттерн: “Индекс на всё”
Создание индекса на каждый столбец:
-- Плохо: много маленьких индексов, мало пользы, много затрат
CREATE INDEX idx1 ON table(a);
CREATE INDEX idx2 ON table(b);
CREATE INDEX idx3 ON table(c);
...
Проблемы:
* Большой объём хранилища.
* Замедление DML-операций.
* Планы запросов могут пропускать некоторые индексы.
💡 Вывод
Правильно подобранные и настроенные индексы — ключ к быстрой работе базы. Сосредоточься на реально востребованных столбцах, комбинируй, не забывай про обслуживание.
Сохрани этот мини-гайд, чтобы не забыть, и поделись с коллегами: какие индексы стали для тебя открытием?
#db
👉 @database_info
1500
12:58
24.05.2025
imageИзображение не доступно для предпросмотра
Не знаешь на кого пойти учиться ?💥
🛑 Пройди бесплатные онлайн-курсы
🛑 Узнай о самых востребованных профессиях
🛑 Получи уникальную возможность поступить в «Алабуга Политех» после 9 или 11 класса
ПРОЙДИ КУРС ПРЯМО СЕЙЧАС!
ПРОЙДИ КУРС ПРЯМО СЕЙЧАС!
1500
11:02
22.05.2025
imageИзображение не доступно для предпросмотра
Антипаттерн:
Использовать
Почему это плохо:
🔹 Излишняя нагрузка на сеть и СУБД — выбираются все столбцы, включая ненужные.
🔹 Проблемы с индексами — СУБД может не использовать покрывающий индекс.
🔹 Ломается при изменении схемы — добавил столбец → внезапно изменилось поведение приложения.
🔹 Сложнее читать и поддерживать — особенно в JOIN’ах.
✅ Как правильно:
Запрашивай только нужные поля:
📌 И даже в админках/аналитике лучше явно указывать поля — это дисциплинирует.
Хочешь писать код, который легко масштабировать и отлаживать — забудь про
Сохрани, чтобы не забыть 💾
Поделись с коллегами, которые всё ещё "звёздят" в SQL ✨
#db
👉 @database_info
SELECT *
— удобно, но опасноИспользовать
SELECT *
— значит звать всех на вечеринку, даже если звал только двоих.Почему это плохо:
🔹 Излишняя нагрузка на сеть и СУБД — выбираются все столбцы, включая ненужные.
🔹 Проблемы с индексами — СУБД может не использовать покрывающий индекс.
🔹 Ломается при изменении схемы — добавил столбец → внезапно изменилось поведение приложения.
🔹 Сложнее читать и поддерживать — особенно в JOIN’ах.
✅ Как правильно:
Запрашивай только нужные поля:
SELECT id, name, created_at FROM users;
📌 И даже в админках/аналитике лучше явно указывать поля — это дисциплинирует.
Хочешь писать код, который легко масштабировать и отлаживать — забудь про
SELECT *
.Сохрани, чтобы не забыть 💾
Поделись с коллегами, которые всё ещё "звёздят" в SQL ✨
#db
👉 @database_info
1600
10:30
19.05.2025
imageИзображение не доступно для предпросмотра
🔧 Mini-гайд: ускоряем JOIN-ы в больших таблицах
JOIN-ы — мощный инструмент SQL, но на больших объёмах данных могут стать узким горлышком. Вот 5 проверенных способов ускорить их:
1. Индексы по ключам соединения
Без индекса — каждый JOIN превращается в полный перебор.
➤ Пример:
2. Ограничь объём данных до JOIN-а
Фильтруй и агрегируй данные до объединения.
➤ Вместо:
➤ Лучше:
3. Учитывай тип JOIN-а
4. Следи за типами данных
5. Проверь планы выполнения (EXPLAIN)
Не гадай, а смотри, что реально происходит.
📌 Даже один лишний JOIN может уронить производительность. Внимательность + EXPLAIN = уверенность.
Поделись с коллегами — спасёшь чей-то прод.
#db
👉 @database_info
JOIN-ы — мощный инструмент SQL, но на больших объёмах данных могут стать узким горлышком. Вот 5 проверенных способов ускорить их:
1. Индексы по ключам соединения
Без индекса — каждый JOIN превращается в полный перебор.
➤ Пример:
CREATE INDEX idx_user_id ON orders(user_id);
2. Ограничь объём данных до JOIN-а
Фильтруй и агрегируй данные до объединения.
➤ Вместо:
SELECT * FROM orders o JOIN users u ON o.user_id = u.id WHERE u.country = 'DE';
➤ Лучше:
WITH german_users AS (
SELECT id FROM users WHERE country = 'DE'
)
SELECT * FROM orders o JOIN german_users g ON o.user_id = g.id;
3. Учитывай тип JOIN-а
INNER JOIN
обычно быстрее OUTER JOIN
, особенно при наличии NOT NULL. Иногда EXISTS
работает быстрее, чем LEFT JOIN
.4. Следи за типами данных
JOIN
по полям с разными типами (например, int
и varchar
) = неэффективный cast + тормоза.5. Проверь планы выполнения (EXPLAIN)
Не гадай, а смотри, что реально происходит.
EXPLAIN ANALYZE
— твой друг.📌 Даже один лишний JOIN может уронить производительность. Внимательность + EXPLAIN = уверенность.
Поделись с коллегами — спасёшь чей-то прод.
#db
👉 @database_info
1800
18:18
19.05.2025
imageИзображение не доступно для предпросмотра
Мини-гайд по трём ключевым сущностям PostgreSQL: соединения, буфер и WAL
1. Соединения (Connections)
PostgreSQL по умолчанию позволяет одновременно до 100 соединений (
🔹 Проблема: слишком много прямых соединений создают нагрузку на память и CPU.
🔹 Решение: используйте пуллинг через PgBouncer или Pgpool-II.
🔹 Совет: на проде стремитесь держать
2. Буфер (Shared Buffers & Work Mem)
PostgreSQL активно использует память для кэширования страниц и сортировок.
🔹
🔹
🔹 Best practice:
🔹 Установите
🔹 Настройте
3. WAL (Write-Ahead Log)
WAL обеспечивает надёжность и репликацию.
🔹
🔹
🔹 Архивация WAL для резервных копий:
🔹 Рекомендации:
🔹 Увеличьте
🔹 Настройте сжатие WAL (pg_wal) для экономии места.
💡 Сохрани, чтобы не забыть!
А как вы оптимизируете соединения, буфер и WAL в своих проектах?
#db
👉 @database_info
1. Соединения (Connections)
PostgreSQL по умолчанию позволяет одновременно до 100 соединений (
max_connections
).🔹 Проблема: слишком много прямых соединений создают нагрузку на память и CPU.
🔹 Решение: используйте пуллинг через PgBouncer или Pgpool-II.
[databases]
mydb = host=127.0.0.1 port=5432 dbname=mydb
[pgbouncer]
listen_addr = 0.0.0.0
listen_port = 6432
pool_mode = transaction
max_client_conn = 500
default_pool_size = 20
🔹 Совет: на проде стремитесь держать
max_connections
< 200 и масштабируйте через пуллер.2. Буфер (Shared Buffers & Work Mem)
PostgreSQL активно использует память для кэширования страниц и сортировок.
🔹
shared_buffers
– основной буфер кэша:
shared_buffers = 4GB # ≈25% от RAM на выделенном сервере
🔹
work_mem
– память на сортировку/слияние одного потока:
work_mem = 64MB # для сложных запросов с сортировками и хэш-джоинами
maintenance_work_mem = 512MB # для VACUUM/CREATE INDEX
🔹 Best practice:
🔹 Установите
shared_buffers
≈ 25% RAM.🔹 Настройте
work_mem
исходя из числа параллельных операций, не превышайте общий объём памяти.3. WAL (Write-Ahead Log)
WAL обеспечивает надёжность и репликацию.
🔹
wal_level
– детальность логирования:
wal_level = replica # для потоковой репликации
🔹
checkpoint_timeout
и max_wal_size
:
checkpoint_timeout = 10min
max_wal_size = 1GB
🔹 Архивация WAL для резервных копий:
archive_mode = on
archive_command = 'cp %p /mnt/backup/wal/%f'
🔹 Рекомендации:
🔹 Увеличьте
max_wal_size
, если у вас большие всплески нагрузки.🔹 Настройте сжатие WAL (pg_wal) для экономии места.
💡 Сохрани, чтобы не забыть!
А как вы оптимизируете соединения, буфер и WAL в своих проектах?
#db
👉 @database_info
1100
10:50
11.06.2025
imageИзображение не доступно для предпросмотра
❌ Антипаттерн: булевы значения как строки
В таблице
На первый взгляд — ерунда. На практике:
– нет валидации: можно вставить
– медленнее сравнение, чем у
– больше места в хранилище,
– сложно агрегировать и строить аналитику.
🔧 Как надо:
– Экономия места (1 байт против 5 и больше)
– Проверка через
– Простой
– Автоматическая поддержка в ORM и UI-форматах
📌 Даже если тебе нужно больше состояний — используй
💡 Чем проще тип — тем меньше шансов на баг.
Сохрани, если в коде встречал такое — и переделай с чистой совестью.
#db
👉 @database_info
В таблице
users
встречал такое:
is_active VARCHAR(5) -- значения 'true' или 'false'
На первый взгляд — ерунда. На практике:
– нет валидации: можно вставить
'tru'
, 'yes'
, '0'
,– медленнее сравнение, чем у
BOOLEAN
,– больше места в хранилище,
– сложно агрегировать и строить аналитику.
🔧 Как надо:
is_active BOOLEAN DEFAULT true
– Экономия места (1 байт против 5 и больше)
– Проверка через
WHERE is_active
– Простой
COUNT(*) FILTER (WHERE is_active)
для отчётов– Автоматическая поддержка в ORM и UI-форматах
📌 Даже если тебе нужно больше состояний — используй
ENUM
, а не строку.💡 Чем проще тип — тем меньше шансов на баг.
Сохрани, если в коде встречал такое — и переделай с чистой совестью.
#db
👉 @database_info
1500
08:30
22.05.2025
imageИзображение не доступно для предпросмотра
📕 Управление ресурсами в ClickHouse для разработчиков, администраторов баз данных, инженеров и аналитиков данных
На открытом уроке 17 июня в 20:00 мск мы разберем тонкости управления ресурсами и профилирования запросов в ClickHouse:
📗 На вебинаре разберём:
1. Методы управления ресурсами в ClickHouse: настройка квот, ограничений и профилей пользователей;
2. Детальное профилирование запросов для выявления узких мест и оптимизации их выполнения;
📘 В результате на практике разберете важные аспекты для обеспечения высокой производительности и стабильности работы системы в ClickHouse.
👉 Регистрация и подробности о курсе ClickHouse для инженеров и архитекторов БД: https://vk.cc/cMSOpO
Все участники открытого урока получат скидку на курс "ClickHouse для инженеров и архитекторов БД"
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
На открытом уроке 17 июня в 20:00 мск мы разберем тонкости управления ресурсами и профилирования запросов в ClickHouse:
📗 На вебинаре разберём:
1. Методы управления ресурсами в ClickHouse: настройка квот, ограничений и профилей пользователей;
2. Детальное профилирование запросов для выявления узких мест и оптимизации их выполнения;
📘 В результате на практике разберете важные аспекты для обеспечения высокой производительности и стабильности работы системы в ClickHouse.
👉 Регистрация и подробности о курсе ClickHouse для инженеров и архитекторов БД: https://vk.cc/cMSOpO
Все участники открытого урока получат скидку на курс "ClickHouse для инженеров и архитекторов БД"
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
630
13:34
16.06.2025
imageИзображение не доступно для предпросмотра
📕 Сравнение индексации в PostgreSQL и ClickHouse для разработчиков, администраторов баз данных, инженеров и аналитиков данных
На открытом уроке 3 июня в 20:00 мск мы обсудим различия в механизмах индексации между PostgreSQL и ClickHouse:
📗 На вебинаре разберём:
1. Основы и сравнение производительности разных подходов к индексации;
2. Для каких сценариев распространено использование этих подходов;
📘 В результате на практике разреберете и сравните подходы, производительность и архитектуру индексации PostgreSQL и ClickHouse.
👉 Регистрация и подробности о курсе ClickHouse для инженеров и архитекторов БД: https://vk.cc/cMuQbb
Все участники открытого урока получат скидку на курс "ClickHouse для инженеров и архитекторов БД"
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
На открытом уроке 3 июня в 20:00 мск мы обсудим различия в механизмах индексации между PostgreSQL и ClickHouse:
📗 На вебинаре разберём:
1. Основы и сравнение производительности разных подходов к индексации;
2. Для каких сценариев распространено использование этих подходов;
📘 В результате на практике разреберете и сравните подходы, производительность и архитектуру индексации PostgreSQL и ClickHouse.
👉 Регистрация и подробности о курсе ClickHouse для инженеров и архитекторов БД: https://vk.cc/cMuQbb
Все участники открытого урока получат скидку на курс "ClickHouse для инженеров и архитекторов БД"
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
1600
16:01
02.06.2025
imageИзображение не доступно для предпросмотра
💣 NULL — тихий саботаж в твоей БД
На первый взгляд,
📉 Антипаттерн: беспечное обращение с NULL
Примеры:
Ты думаешь, что отбираешь всех взрослых, но
🙈 Проблема:
📉 Итоги: ошибки в JOIN'ах, WHERE-фильтрах, расчетах.
🛡 Как защититься:
✅ Явно учитывай
✅ Используй
✅ Проверяй
✅ Для агрегаций учитывай поведение
Вывод:
Пиши запросы так, как будто
Сохрани, чтобы не ловить грабли 💥
#db
👉 @database_info
На первый взгляд,
NULL
— просто отсутствие значения. Но на практике это частый источник багов, неверных аналитик и проблем в бизнес-логике.📉 Антипаттерн: беспечное обращение с NULL
Примеры:
SELECT * FROM users WHERE age > 18; -- Пользователи с age = NULL не попадут
Ты думаешь, что отбираешь всех взрослых, но
age = NULL
тут "выпадает", ведь NULL > 18
→ UNKNOWN
.
WHERE col1 = col2 -- Не сработает, если хотя бы одно значение NULL
🙈 Проблема:
NULL
не равно даже самому себе (NULL != NULL
).📉 Итоги: ошибки в JOIN'ах, WHERE-фильтрах, расчетах.
🛡 Как защититься:
✅ Явно учитывай
NULL
:
WHERE age > 18 OR age IS NULL -- если хочешь включить "неизвестный возраст"
✅ Используй
COALESCE
:
SELECT COALESCE(discount, 0) FROM orders -- подставим 0, если скидка не указана
✅ Проверяй
NULL
через IS NULL
/ IS NOT NULL
✅ Для агрегаций учитывай поведение
NULL
:
AVG(column) -- пропустит NULL'ы, но COUNT(column) тоже не посчитает их!
Вывод:
NULL
— не "ничего", а "неизвестно".Пиши запросы так, как будто
NULL
всегда где-то прячется — и он не на твоей стороне.Сохрани, чтобы не ловить грабли 💥
#db
👉 @database_info
1300
09:23
14.05.2025
close
С этим каналом часто покупают
Отзывы канала
keyboard_arrow_down
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
5.0
0 отзыва за 6 мес.
d
**v_guestadvertur@*****.com
на сервисе с сентября 2021
29.06.202311:29
5
Всё отлично!
Лучшие в тематике
keyboard_double_arrow_left
shopping_cart
Каналов:
0
Подписчиков:
0
Просмотров:
lock_outline
Итого:
0.00₽
Перейти в корзину
Очистить корзину
Вы действительно хотите очистить корзину?
Вы снова сможете добавить каналы в корзину из каталога
Вы снова сможете добавить каналы в корзину из каталога
Очистить
Отменить
Комментарий