Блог об SQL
Разборы, уроки и советы — от основ до продвинутых техник
20 статей по теме Оптимизация
Оптимизация JOIN в PostgreSQL: как ускорить объединения таблиц
Оптимизация JOIN в PostgreSQL: Hash Join vs Nested Loop vs Merge Join, когда JOIN медленный, индексы для JOIN, EXPLAIN ANALYZE, материализация CTE.
Секционирование таблиц в PostgreSQL: PARTITION BY RANGE, LIST, HASH
Секционирование в PostgreSQL: PARTITION BY RANGE, LIST, HASH. Когда нужно секционирование, как создать и управлять секциями, прирост производительности.
Generated columns в PostgreSQL: вычисляемые столбцы
Generated (вычисляемые) столбцы в PostgreSQL: STORED vs виртуальные, синтаксис, ограничения, индексы. Когда использовать вместо триггеров и функциональных индексов.
Подзапросы в SQL: скалярные, строчные, табличные и коррелированные
Типы подзапросов в SQL: скалярный, строчный, табличный, коррелированный. Когда использовать подзапрос, CTE или JOIN. Примеры оптимизации.
Materialized View в PostgreSQL: кэшируем тяжёлые запросы
Materialized View в PostgreSQL: создание, REFRESH MATERIALIZED VIEW, конкурентное обновление, отличие от обычного VIEW. Когда использовать и как избежать проблем.
Функциональные индексы в PostgreSQL: ускоряем запросы с функциями
Функциональные (expression) индексы в PostgreSQL: LOWER(), DATE_TRUNC(), JSON-поля, составные выражения. Когда помогают и как проверить через EXPLAIN.
SQL антипаттерны: 12 ошибок которые замедляют запросы
Разбираем типичные SQL антипаттерны: SELECT *, функции в WHERE, NOT IN с NULL, OFFSET, декартово произведение. Каждый антипаттерн — с правильной альтернативой.
EXPLAIN ANALYZE в PostgreSQL: как читать план запроса
Как использовать EXPLAIN и EXPLAIN ANALYZE в PostgreSQL: читаем план выполнения, находим Seq Scan, понимаем стоимость, ускоряем запросы.
VIEW в SQL: представления, материализованные вью и когда их использовать
Что такое VIEW в PostgreSQL, как создавать, обновлять, удалять. Отличие от материализованного VIEW, обновляемые вью, безопасность через RLS.
EXISTS и NOT EXISTS в SQL: когда использовать вместо JOIN и IN
Разбираем EXISTS и NOT EXISTS: как работают, отличие от IN и LEFT JOIN IS NULL, оптимизация, примеры с коррелированными подзапросами.
Оптимизация SQL-запросов: практическое руководство
Как ускорить медленные SQL-запросы: индексы, переписывание запросов, EXPLAIN ANALYZE, типичные антипаттерны. Реальные примеры и советы для PostgreSQL.
SQL-оптимизация для Senior: вопросы на собеседовании
Вопросы и задачи по оптимизации SQL для Senior-разработчика: EXPLAIN, индексы, партиционирование, антипаттерны.
UNION и UNION ALL в SQL: объединение результатов запросов
Как работают UNION и UNION ALL в SQL: разница, примеры, когда использовать каждый, комбинация с ORDER BY и производительность.
Индексы в PostgreSQL: B-tree, Hash, GIN — что и когда использовать
Как работают индексы в PostgreSQL: типы (B-tree, Hash, GIN, BRIN), составные индексы, partial и expression индексы. Когда индекс не используется и как это проверить через EXPLAIN.
Массовая загрузка данных в PostgreSQL: COPY и bulk INSERT
Как быстро загрузить миллионы строк в PostgreSQL: COPY FROM, multi-row INSERT, отключение индексов, настройки сессии для ETL.
Подзапросы vs JOIN vs CTE: когда что выбрать в SQL
Сравниваем подзапросы, JOIN и CTE в SQL: производительность, читаемость, типичные случаи применения. Разбираем на одной задаче тремя способами.
SQL для BI-разработчика: задачи для найма
Что проверять у BI-разработчика на SQL-собеседовании: витрины данных, оптимизация, специфика ETL и аналитических запросов.
Антипаттерны индексов в PostgreSQL: когда индексы вредят
Когда индексы вредят: дублирующиеся индексы, низкая селективность, избыточное индексирование, index bloat. Как найти бесполезные индексы.
Мониторинг медленных запросов в PostgreSQL: pg_stat_statements
Как находить медленные запросы в PostgreSQL: pg_stat_statements, slow query log, топ-10 самых тяжёлых запросов, мониторинг production.
VACUUM и ANALYZE в PostgreSQL: как поддерживать производительность
VACUUM и ANALYZE в PostgreSQL: зачем нужны, autovacuum, bloat таблиц, как мониторить и когда запускать вручную. Практические советы.