gram news
SQL Academy: всё о реляционных БД и SQL channel avatar

SQL Academy: всё о реляционных БД и SQL

@sqlacademyofficial

По всем вопросам и коммерческим предложениям писать @LadanovNick Купить рекламу: https://telega.in/c/sqlacademyofficial Чат студентов SQL Academy https://t.me/sqlacademyorg

ProjectsRUProgramming

11,600subscribers

Open the Channel

Latest posts

  • SQL Academy: всё о реляционных БД и SQL

    22 Sept, 07:00

    🔥 Приглашаем на бесплатный открытый вебинар курса «SQL для разработчиков и аналитиков»:«Подзапросы или CTE — как сделать сложный запрос понятным» 🗓 Когда: 30 сентября, 20:00 (мск) Сложные SQL-запросы часто превращаются в трудночитаемые конструкции. На вебинаре разберём, когда подзапрос остаётся простым и удобным решением, а когда лучше использовать CTE, чтобы сделать код понятным, удобным для отладки и поддержки.💡Что будет на вебинаре: • Что такое подзапросы и CTE и какие задачи они решают • Когда лучше использовать подзапрос, а когда — CTE • Как разделить сложный запрос на последовательные этапы • Как связать несколько CTE в одном запросе • Как использовать CTE при чтении и изменении данных • Как работают рекурсивные CTE • Какие особенности CTE нужно учитывать при оптимизации👉 Зарегистрируйтесь https://otus.pw/vrzw/?erid=2W5zFG1iYg9Бесплатное занятие приурочено к старту
    Image from a post by SQL Academy: всё о реляционных БД и SQLImage from a post by SQL Academy: всё о реляционных БД и SQL
    1,13052Open in Telegram
  • SQL Academy: всё о реляционных БД и SQL

    11 Sept, 07:45

    22-23 сентября приглашаем на АЛЬФА ВААА{АИ}ЙЙЙБ ХАКАТОН. Создавайте проект высоконагруженного прокси, соревнуйтесь за 2,3 миллиона рублей, общайтесь в комьюнити топовых вайб-кодеров.Всех участников пригласим 30 сентября на АЛЬФА ВААА{АИ}ЙЙЙБ МИТАП. Узнаем, кто из финалистов получит миллион, зажжём на техно-рейве с группой ЛАУД и проведём ток-шоу про нейросети.Скорее регистрируйтесь
    Image from a post by SQL Academy: всё о реляционных БД и SQLImage from a post by SQL Academy: всё о реляционных БД и SQL
    1,210533Open in Telegram
  • SQL Academy: всё о реляционных БД и SQL

    9 Sept, 09:00

    🔥 Приглашаем на бесплатный открытый вебинар курса «ИИ для разработчиков»: «Обзор ИИ-технологий для разработчиков. От идей до рабочих решений» 🗓 Когда: 17 сентября, 20:00 (мск) ИИ-инструменты стремительно меняют ландшафт разработки, но среди десятков новых библиотек и сервисов легко потеряться. Как
    Image from a post by SQL Academy: всё о реляционных БД и SQLImage from a post by SQL Academy: всё о реляционных БД и SQL
    319111Open in Telegram
  • SQL Academy: всё о реляционных БД и SQL

    4 Sept, 08:47

    🪞 Иллюзия скорости: почему обычный VIEW не ускорит запросыСпрятал огромный JOIN в представление, чтобы база работала быстрее? Плохие новости: обычный VIEW вообще ничего не кэширует.⚙️ Как это работает на самом деле Многие путают представление с физической таблицей. Но обычный VIEW — это просто текстовый макрос. 🔹 Каждый раз, когда ты делаешь SELECT FROM my_view, база берёт исходный запрос и выполняет его с нуля. 🔹 Никакие результаты на диск не сохраняются. Все тяжёлые вычисления будут происходить заново при каждом обращении.⚠️ Опасность «матрёшки» Самая частая ошибка — строить одни вьюшки поверх других. 🔸 База вынуждена разворачивать этот клубок в один гигантский запрос. 🔸 Планировщик запросов теряется в абстракциях и может выбрать худший план выполнения. То, что должно работать секунду, выполняется часами.🚀 Что делать? 🔹 Для реального ускорения и сохранения результата на
    4,190761Open in Telegram
  • SQL Academy: всё о реляционных БД и SQL

    4 Sept, 08:47

    Image from a post by SQL Academy: всё о реляционных БД и SQLImage from a post by SQL Academy: всё о реляционных БД и SQL
  • SQL Academy: всё о реляционных БД и SQL

    1 Sept, 07:15

    📚 Скидка к началу учёбы Обещал себе выучить SQL «с сентября»? Вот и сентябрь. По промокоду SEPT26 — минус 25% на премиум до 4 сентября.
    Image from a post by SQL Academy: всё о реляционных БД и SQLImage from a post by SQL Academy: всё о реляционных БД и SQL
    3,740932Open in Telegram
  • SQL Academy: всё о реляционных БД и SQL

    31 Aug, 07:11

    🪓 Убили индекс одной функцией: почему YEAR(date) тормозит базуТы создал идеальный индекс по дате, но запрос всё равно работает целую вечность. Причина кроется всего в одной функции.⚙️ Почему база игнорирует индекс 🔹 Как только ты пишешь WHERE YEAR(order_date) = 2023, база перестаёт видеть исходные значения дат. 🔹 Она не может искать по индексу (как по алфавитному указателю в книге), потому что ей нужно сначала вычислить год для каждой строки таблицы. 🔹 Итог — долгое полное сканирование (Seq Scan), даже если нужных строк всего пара штук.🚀 Как починить (правило SARG) Чтобы индекс сработал, колонка должна оставаться «чистой» — без математики и функций. Перенеси все условия в правую часть от знака равенства.🔸 Плохо: индекс сломается SELECT FROM orders WHERE YEAR(order_date) = 2023;🔸 Хорошо: моментальный поиск SELECT FROM orders WHERE order_date >= '2023-01-01' AND
    3,8201284Open in Telegram
  • SQL Academy: всё о реляционных БД и SQL

    31 Aug, 07:11

    Image from a post by SQL Academy: всё о реляционных БД и SQLImage from a post by SQL Academy: всё о реляционных БД и SQL
  • SQL Academy: всё о реляционных БД и SQL

    26 Aug, 07:12

    🛑 Как Materialized View может повесить продакшенТы создал материализованное представление, чтобы ускорить тяжёлые запросы. Но в момент обновления данных приложение вдруг замирает, а пользователи видят бесконечную загрузку.⚙️ Почему всё зависло Обычная команда REFRESH MATERIALIZED VIEW работает очень грубо. 🔹 Она вешает эксклюзивную блокировку. База полностью запрещает чтение, пока собирает новые данные. Это как закрыть магазин на переучёт — внутрь никого не пускают.🚀 Как обновить без даунтайма Чтобы отдавать пользователям старые данные, пока база в фоне строит новые, используй эту команду: REFRESH MATERIALIZED VIEW CONCURRENTLY my_report;⚠️ Главный подвох Слово CONCURRENTLY не сработает просто так. Базе нужно точно понимать, как сопоставлять старые и новые строки при фоновом обновлении. 🔸 Обязательное условие: на вьюшке должен быть создан уникальный индекс (например, по ID).
    3,52012321Open in Telegram
  • SQL Academy: всё о реляционных БД и SQL

    26 Aug, 07:12

    Image from a post by SQL Academy: всё о реляционных БД и SQLImage from a post by SQL Academy: всё о реляционных БД и SQL
  • SQL Academy: всё о реляционных БД и SQL

    24 Aug, 07:57

    🙈 Повесил индекс, а база его игноритТы создал индекс на колонку status, запускаешь поиск, а EXPLAIN нагло выдаёт Seq Scan. Кажется, база сломалась, но на самом деле она спасает твоё время.⚙️ Почему это происходит Индекс работает как алфавитный указатель в конце книги. Он идеален, если тебе нужно найти 5 строк из миллиона. База быстро находит ссылки и точечно забирает данные.📉 Когда Full Scan быстрее Если ты ищешь активных пользователей (например, is_active = true), а их в таблице 85%, индекс становится врагом оптимизатора. 🔹 Читать таблицу подряд (Full Scan) — это очень быстро. Как читать книгу страницу за страницей. 🔹 Использовать индекс для 85% строк — это сотни тысяч хаотичных прыжков туда-сюда за каждой отдельной строкой (Random I/O). Это слишком медленно, базе гораздо дешевле прочитать всё подряд и отфильтровать лишнее.🚀 Что делать 🔸 Не строй индексы на колонки, где
    3,19010422Open in Telegram
  • SQL Academy: всё о реляционных БД и SQL

    24 Aug, 07:57

    Image from a post by SQL Academy: всё о реляционных БД и SQLImage from a post by SQL Academy: всё о реляционных БД и SQL
  • SQL Academy: всё о реляционных БД и SQL

    5 Aug, 07:37

    🤡 Иллюзия оптимизации: индекс на is_active только вредитКажется логичным: если в запросах часто есть WHERE is_active = true, на эту колонку нужен индекс. Но на деле база его проигнорирует, а ты лишь замедлишь работу системы.⚙️ Почему база его не использует Индексу важно разнообразие значений (кардинальность). Представь предметный указатель в конце книги: если слово встречается на 90% страниц, проще пролистать всю книгу целиком. Оптимизатор рассуждает так же. Если значений всего два (true/false), он выберет полное сканирование таблицы (Seq Scan). Читать данные подряд намного быстрее, чем постоянно прыгать туда-сюда между индексом и таблицей.📉 В чем реальный вред Проигнорированный индекс становится мертвым грузом: 🔹 При каждом INSERT, UPDATE и DELETE базе приходится тратить время на обновление этой ненужной структуры. 🔹 Индекс впустую съедает место на диске и вытесняет из
    4,95014123Open in Telegram
  • SQL Academy: всё о реляционных БД и SQL

    5 Aug, 07:37

    Image from a post by SQL Academy: всё о реляционных БД и SQLImage from a post by SQL Academy: всё о реляционных БД и SQL
  • SQL Academy: всё о реляционных БД и SQL

    27 Jul, 07:21edited

    🪤 Ловушка Foreign Key: почему удаление строки вешает базуТы удаляешь одного пользователя, а внезапно зависает весь проект. Если ты работаешь в PostgreSQL, обычный внешний ключ может стать причиной жесткой блокировки.⚙️ В чём подвох? Многие уверены, что FOREIGN KEY автоматически создаёт индекс на колонку связи. 🔹 В MySQL это действительно так. 🔹 А вот в PostgreSQL — нет. Индекс нужно создавать вручную.📉 Что происходит при удалении Когда ты удаляешь запись из родительской таблицы (например, юзера), базе нужно убедиться, что на него нет ссылок в дочерней таблице (например, в заказах). 🔸 Без индекса база делает Full Table Scan — перебирает каждую строку в заказах. Это как искать нужное предложение, читая всю книгу целиком. 🔸 На время этого долгого поиска дочерняя таблица блокируется. Очередь запросов растёт, пока база не сломается от перегрузки.🚀 Решение Просто добавь индекс
    Image from a post by SQL Academy: всё о реляционных БД и SQLImage from a post by SQL Academy: всё о реляционных БД и SQL
    5,3902194Open in Telegram
  • SQL Academy: всё о реляционных БД и SQL

    20 Jul, 07:54

    🧮 Математика с подвохом: почему сложение обнуляет зарплату, а SUM() — нетСчитаешь итоговую выплату сотруднику как salary + bonus? Если премии нет (в базе лежит NULL), математика сыграет злую шутку, и человек останется вообще без денег в итоговом отчёте.⚠️ Ловушка прямого сложения 🔹 NULL — это не ноль, а полная «неизвестность». 🔹 Любая математическая операция с неизвестностью заражает итог. Если оклад 1000, а бонус NULL, выражение 1000 + NULL вернёт пустоту (NULL).🛡 Почему SUM() ведёт себя иначе 🔸 Агрегатные функции (SUM(), AVG()) созданы для работы с группами строк и спроектированы так, чтобы игнорировать пустые ячейки. 🔸 Если сделать SUM(bonus) для значений 100, 200 и NULL, функция просто перешагнёт через пустоту и спокойно выдаст 300.🚀 Как спасти строчные вычисления Используй COALESCE — функцию, которая перехватит NULL и заменит его на запасной вариант.SELECT salary +
    4,43039751Open in Telegram
  • SQL Academy: всё о реляционных БД и SQL

    20 Jul, 07:54

    Image from a post by SQL Academy: всё о реляционных БД и SQLImage from a post by SQL Academy: всё о реляционных БД и SQL
  • SQL Academy: всё о реляционных БД и SQL

    13 Jul, 09:37edited

    💣 Цепная реакция: почему ON DELETE CASCADE запрещают на продеВ туториалах эту фичу хвалят: удалил пользователя, а база сама зачистила его заказы. На практике это мина, которая может незаметно стереть половину данных.⚠️ В чем главная опасность 🔹 Невидимая угроза. Одна неточность в запросе: DELETE FROM users WHERE status = 'banned'; И каскад автоматически стирает связанные платежи, историю и профили. 🔹 Тишина в логах. Приложение даже не узнает, что база удалила еще сотни строк в других таблицах. Восстановить хронологию ошибки будет очень сложно. 🔹 Блокировки. Удаление одной строки тянет за собой скрытые проверки в десятках связанных таблиц, замедляя остальные операции.🚀 Как делают правильно 🔸 Явное удаление. Сначала код приложения отдельными запросами удаляет зависимости, пишет подробные логи, и только потом удаляет самого пользователя. 🔸 Мягкое удаление (Soft Delete). Вместо
    Image from a post by SQL Academy: всё о реляционных БД и SQLImage from a post by SQL Academy: всё о реляционных БД и SQL
    4,7201062Open in Telegram
  • SQL Academy: всё о реляционных БД и SQL

    10 Jul, 07:24

    🤯 Парадокс 3VL: почему WHERE блокирует NULL, а CHECK — радостно пропускает?Ты добавил условие CHECK (salary > 0), чтобы в базу не попадали кривые зарплаты. Но вдруг обнаруживаешь там пустые значения. Как так вышло?⚙️ Трехзначная логика (3VL) В SQL кроме TRUE и FALSE есть состояние UNKNOWN (неизвестно). Если сравнить пустоту с нулем (NULL > 0), результат будет не ложь, а именно неизвестность. И механизмы базы реагируют на это по-разному.🛡️ Двойные стандарты SQL 🔹 Фильтр WHERE — строгий охранник. Он возвращает строку, только если условие дало TRUE. Состояние UNKNOWN он воспринимает как FALSE и скрывает запись. 🔸 Валидация CHECK — ленивый вахтер. Она отклоняет запись, только если условие дало FALSE. Если результат UNKNOWN, ограничение пожимает плечами и пропускает значение в таблицу.CREATE TABLE emp ( salary INT CHECK (salary > 0) ); -- Запишется без ошибок! INSERT INTO emp
    3,93025443Open in Telegram
  • SQL Academy: всё о реляционных БД и SQL

    10 Jul, 07:24

    Image from a post by SQL Academy: всё о реляционных БД и SQLImage from a post by SQL Academy: всё о реляционных БД и SQL