Мой путь в SQL: от SELECT * и боли до архитектурыПривет! На связи Владимир Лунев, автор
тренинга «Продвинутый SQL».
Многие спрашивают, как я начинал свой путь в SQL, и этот пост как раз об этом)
Изначально я не мечтал быть DBA или аналитиком. Познакомился с SQL случайно на первой работе, после окончания университета, нужно было вытаскивать данные из пары таблиц БД и делать отчёты в Excel. Знал только SELECT * FROM table — и думал, что это и есть вся база.
В первые месяцы считал себя крутым программистом, но идиллия закончилась, когда меня повысили в должности и дали новый функционал. Там простым SELECT уже было не обойтись.
И начался ад.
Срочные отчёты для руководства, дедлайны, нехватка знаний для быстрой выгрузки данных из БД, а ещё же надо было потом всё это обрабатывать в Excel. Тогда я сильно нервничал и буквально жил на работе. Писал запросы на 100 строк без нормальных JOIN (только подзапросы), не знал, что такое CTE, думал, что GROUP BY — это для красивой группировки, и прочие прелести начинающего специалиста.
Тут я понял, что нужно что-то менять, и плотно взялся за SQL. Причём учить что-то на работе получалось редко за исключением впитывания советов от более старших коллег, поэтому основное моё обучение происходило по вечерам дома.
БД и SQL для меня тогда выглядели огромным и сложным айсбергом знаний для каких-то очень гениальных людей, и пока я пытался всё это изучить, я совершил ряд ошибок в теории и практике, которые очевидны для меня сейчас:
➖
Учил синтаксис, а не логику. Зубрил CASE, WINDOW FUNCTIONS, но не понимал, как данные связаны. Сейчас я рисую ER-диаграммы даже для простых задач, связанных с отчётностью. Да, на это тратится какое-то время, но зато и я и коллеги понимают, как работает код.
➖
Боялся production. Думал, а вдруг сломаю? Потом понял — без боевых условий не научишься. Начал с малого — перед запуском запросов читал их explain-план.
➖
Думал, что красивый отчёт = хороший анализ. Составлял дашборды с кучей графиков, но не проверял, откуда берутся метрики. Однажды выяснилось, что уникальные пользователи считались по COUNT(user_id), а не COUNT(DISTINCT user_id). После решил — любую метрику сначала верифицирую на сырых данных, а потом уже визуализирую.
➖
Не задавал вопросы заказчику отчёта. Делал отчёт по ТЗ, но не уточнял, что за этим числом стоит. Выяснилось, что метрика «Активные пользователи» для маркетинга — это однодневные заходы, а для продукта 7-дневные.
➖
Хранил запросы в клиенте СУБД. Однажды потерял критически важный скрипт перед дедлайном. Теперь всё в Git, даже временные запросы. И даю файлам нормальные имена, пишу документацию.
Как принимал решения? На первых порах — по боли:
🟠 Если запрос выполнялся 10 минут — учил индексы и оптимизацию.
🟠 Если коллеги ругались на непонятные цифры — учил метрики.
🟠 Если не мог объяснить бизнесу, откуда берётся число — учил предметную область.
Дальше решал по принципу «максимальный рычаг» — что даст больше роста за единицу времени? Например, изучить оконные функции и читать execution plan — и таким образом сразу ускорю отчёты.
Главный совет, который я сам долго не слышал — не стремись знать всё. Стремись понимать, как устроено. Знать 50 функций бесполезно. Понимать, почему запрос медленный, как данные хранятся, когда обновляются, что происходит при транзакции — это даёт свободу.
И напоследок.
Мой путь — не линейный. Были проекты, где я ломал продакшн (да, такое было). Были месяцы, когда казалось: всё уже изучил. А потом приходил новый кейс — и снова ноль. Путь был сложным, и он продолжается до сих пор.
Главное — не переставать учиться.✅ Всё ещё жду вас на своём тренинге «Продвинутый SQL», где вы научитесь писать SQL, который работает быстро даже на больших объёмах данных. Вы прокачаетесь в системном мышлении и начнёте думать на языке данных: видеть связи, строить логику анализа и предлагать решения, которые экономят время всей команды.
💎
Записаться на продвинутый SQL до 17 октября📊
Simulative