SQL Portal | Базы Данных
Присоединяйтесь к нашему каналу и погрузитесь в мир баз данных Связь: @devmangx РКН: https://clck.ru/3H4Wo3
نمایش بیشتر📈 تحلیل کانال تلگرام SQL Portal | Базы Данных
کانال SQL Portal | Базы Данных (@sqlportal) بازیگری فعال است. در حال حاضر جامعه شامل 14 086 مشترک است و جایگاه 9 141 را در دسته فناوری و برنامهها و رتبه 47 129 را در منطقه روسيا دارد.
📊 شاخصهای مخاطب و پویایی
از زمان ایجاد در невідомо، پروژه رشد سریعی داشته و 14 086 مشترک جذب کرده است.
بر اساس آخرین دادهها در تاریخ 24 ژوئن, 2026، کانال فعالیت پایداری دارد. در ۳۰ روز گذشته تغییر اعضا برابر -146 و در ۲۴ ساعت گذشته برابر -4 بوده و همچنان دسترسی گستردهای حفظ شده است.
- وضعیت تأیید: تأیید نشده
- نرخ تعامل (ER): میانگین تعامل مخاطب 8.11% است و در ۲۴ ساعت نخست پس از انتشار، محتوا معمولاً 4.86% واکنش نسبت به کل مشترکان کسب میکند.
- دسترسی پستها: هر پست به طور میانگین 1 142 بازدید دریافت میکند. در اولین روز معمولاً 685 بازدید جمعآوری میشود.
- واکنشها و تعامل: مخاطبان بهطور فعال حمایت میکنند؛ میانگین واکنش به هر پست 2 است.
- علایق موضوعی: محتوا بر موضوعات کلیدی مانند строка, sql, индекс, postgres, колонка تمرکز دارد.
📝 توضیح و سیاست محتوایی
نویسنده این فضا را محل بیان دیدگاههای شخصی توصیف میکند:
“Присоединяйтесь к нашему каналу и погрузитесь в мир баз данных
Связь: @devmangx
РКН: https://clck.ru/3H4Wo3”
به لطف بهروزرسانیهای پرتکرار (آخرین داده در تاریخ 25 ژوئن, 2026)، کانال همواره بهروز و دارای دسترسی بالاست. تحلیلها نشان میدهد مخاطبان بهطور فعال با محتوا تعامل دارند و آن را به نقطه اثرگذاری مهم در دسته فناوری و برنامهها تبدیل کردهاند.
NOT NULL, CHECK, диапазонов значений и других правил будут перенесены в JSON Schema. Это позволяет приложениям выполнять валидацию ещё до отправки данных в базу.
При использовании NOPRECHECK ограничения не включаются в схему, а проверка и определение допустимых значений остаются на стороне базы данных.
Функция доступна в Oracle AI Database 26ai и помогает синхронизировать правила валидации между БД и приложением.
👉 @SQLPortalJOIN TO ONE
WAIT/NOWAIT для DML-операций
вложенные WITH-выражения (Nested WITH)
https://www.oracle.com/database/free/get-started/
👉 @SQLPortalWITH, позволяют создавать именованные подзапросы:
WITH cte AS (
SELECT ...
)
SELECT *
FROM cte;
CTE помогают упростить сложные SQL-запросы и сделать их более читаемыми.
Вместо вложенных подзапросов на несколько уровней можно разбить логику на отдельные именованные блоки и затем использовать их как обычные таблицы в основном запросе.
Преимущества:
→ улучшают читаемость сложных запросов
→ позволяют повторно использовать промежуточные результаты
→ упрощают отладку и поддержку SQL-кода
→ поддерживают рекурсивные запросы через WITH RECURSIVE
Baraa Khatib Salkini наглядно показывает, как работают CTE и почему они делают сложные SQL-запросы гораздо понятнее.
👉 @SQLPortalshared_buffers, WAL, репликам чтения и агрессивности autovacuum.
Чтение и запись — не одно и то же
Чтение получает страницу размером 8 КБ из shared_buffers или кэша ОС.
Если страница уже закэширована, стоимость операции почти нулевая.
Если её приходится читать с диска — это одно физическое чтение.
С записью всё сложнее:
• Изменение сначала записывается в WAL, и только после этого транзакция может быть подтверждена
• При первой записи после checkpoint'а может потребоваться запись всей страницы в WAL (full page write)
• Обновляются все связанные индексы
• Может выполняться запись в TOAST-таблицы и TOAST-индексы
• Страница данных должна находиться в памяти, поэтому запись часто включает дополнительное чтение
Из-за этого одна операция записи по стоимости ввода-вывода обычно заметно дороже одной операции чтения.
Настройки для read-heavy нагрузок
• shared_buffers и effective_cache_size — чем больше горячих данных помещается в памяти, тем меньше обращений к диску
• Индексы на колонках из WHERE, JOIN и ORDER BY — выигрыш от ускорения чтения обычно перекрывает накладные расходы на обновление индексов
• Read replicas — позволяют распределить нагрузку от SELECT-запросов без воздействия на primary-узел
• EXPLAIN ANALYZE — помогает находить медленные запросы и заменять последовательное сканирование (Seq Scan) на индексное (Index Scan) там, где это оправдано
Настройки для write-heavy нагрузок
• Быстрые накопители (NVMe SSD, высокий IOPS) — записи нельзя обслуживать только за счёт кэша
• Меньше индексов — каждый индекс приходится обновлять при записи; неиспользуемые индексы лучше удалять
• HOT Updates и fillfactor — Postgres может обновлять строку без изменения индексов, если индексируемые поля не меняются и на странице есть свободное место
• Настройка WAL — wal_buffers уменьшает частоту сбросов WAL, а checkpoint_timeout и checkpoint_completion_target помогают сглаживать пики нагрузки во время checkpoint'ов
• Более крупный shared_buffers — грязные страницы должны находиться в памяти до их записи на диск, поэтому дополнительная память может улучшить производительность систем с интенсивной записью.
👉 @SQLPortalt1 JOIN t2 USING (c1)
Но здесь есть неприятная ловушка
Такой запрос:
t1
JOIN t2 USING (c1)
JOIN t3 USING (c2)
будет работать, если c2 есть только в t2 и t3.
Проблемы начинаются позже.
Если в будущем кто-то добавит колонку c2 в t1, запрос внезапно перестанет работать или начнёт вести себя не так, как ожидалось.
Причина в том, что USING опирается на имена колонок, а не на явные ссылки на таблицы. Изменение схемы может неожиданно повлиять на уже существующие JOIN'ы.
Именно поэтому многие разработчики предпочитают более явный вариант:
t1
JOIN t2 ON t1.c1 = t2.c1
JOIN t3 ON t2.c2 = t3.c2
Кода чуть больше, зато зависимость от структуры таблиц становится очевидной и предсказуемой.
Лукас Эдер показывает этот кейс на простом примере и напоминает, что некоторые удобные сокращения в SQL могут обернуться проблемами спустя месяцы или годы.
https://blog.jooq.org/why-join-using-can-lead-to-errors-in-sql/
👉 @SQLPortalSELECT
user_id,
count(*) AS total_events
FROM events
GROUP BY user_id
ORDER BY total_events DESC
LIMIT 10;
Предположим, что индексов нет, таблица events содержит 1 000 000 строк и 10 000 уникальных user_id. Такой запрос выполняет большой объём работы. В любом случае ему придётся прочитать каждую строку таблицы.
Параллельный конвейер Postgres
Postgres разделил таблицу на три части, выполнил агрегацию параллельно и затем объединил результаты.
[см. изображение с выводом EXPLAIN ANALYZE]
loops=3 для Seq Scan
Workers Launched: 2 (лидирующий процесс + 2 воркера = всего 3 процесса)
Partial HashAggregate выполняется в каждом воркере
результаты объединяются через Finalize HashAggregate в лидирующем процессе
Несмотря на высокую скорость выполнения, это не лучший вариант для OLTP-базы данных.
При высокой конкурентной нагрузке пул воркеров становится узким местом. Запрос может работать быстро, пока ресурсов хватает, но заметно замедляться при конкуренции за CPU. Запросы с нестабильным временем выполнения — хорошие кандидаты для оптимизации.
Параллельные воркеры не заменяют здоровую архитектуру базы данных:
Добавляйте индексы, чтобы избежать полного сканирования таблиц и дорогостоящих сортировок.
Используйте summary-таблицы или materialized view, чтобы не выполнять тяжёлые агрегации на больших объёмах данных.
Разбивайте time-series таблицы на партиции, чтобы уменьшить объём данных, который приходится сканировать в типовых запросах.
👉 @SQLPortal
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
