Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+737новых вакансий за сутки·51 861вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 706
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python5 436
  • Облачные технологии4 071
  • QA вакансии1 587
  • Android1 093
  • Инженер данных782
  • Продакт-менеджер310

Разработка

  • iOS1 047
  • Backend вакансии986
  • Fullstack вакансии437
  • Frontend вакансии354
  • AI вакансии350
  • Mobile вакансии27

По стеку

  • Go2 987
  • Java1 810
  • Kotlin868
  • Node.js675
  • .NET436
  • Rust435
  • PHP248
  • C++204
  • C#190

DevOps и инфраструктура

  • Kubernetes2 306
  • Linux-инфраструктура1 890
  • DevOps вакансии1 675
  • Terraform / IaC1 405
  • CI/CD841
  • Мониторинг и Observability645
  • SRE217
  • Кибербезопасность46

Аналитика и данные

  • Аналитик данных476
  • Data Scientist450
  • Бизнес-аналитик341
  • Системный аналитик48

Другие направления

  • Проджект-менеджер103
  • UI/UX дизайн70
  • Ручное тестирование14

По регионам

  • Вакансии в США23 809
  • Вакансии в Европе9 134
  • Работа в России2 924
  • Вакансии в Канаде2 119

По формату

  • Удалённые вакансии41 654
  • Релокация в США23 809
  • Гибридная работа3 374
  • Офисная работа2 525

По уровню

  • Senior вакансии20 056
  • Middle вакансии11 874
  • Junior вакансии3 682

Сейчас нанимают

Все компании
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Wise71 вакансия
  • Infobip28 вакансий
  • Darktrace17 вакансий
  • Spotify14 вакансий
  • Celonis11 вакансий
  • Razorpay9 вакансий
  • Adyen8 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме MySQLВсе вопросы
MySQLSeniorТеория

Как анализировать медленный запрос с помощью EXPLAIN?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

EXPLAIN (и EXPLAIN ANALYZE в MySQL 8.0+) показывает тип доступа, используемые индексы и оценку строк; ключевые поля — type, key, rows, filtered, Extra — позволяют локализовать bottleneck и проверить гипотезу добавлением индекса.

Форматы EXPLAIN

-- Классический табличный вывод
EXPLAIN
SELECT o.id, c.email
FROM orders o
JOIN customers c ON c.id = o.customer_id
WHERE o.status = 'pending'
ORDER BY o.created_at DESC
LIMIT 20;

-- Древовидный формат (MySQL 8.0+)
EXPLAIN FORMAT=TREE
SELECT o.id, c.email
FROM orders o
JOIN customers c ON c.id = o.customer_id
WHERE o.status = 'pending'
ORDER BY o.created_at DESC
LIMIT 20;

-- Фактические метрики выполнения (MySQL 8.0.18+)
EXPLAIN ANALYZE
SELECT o.id, c.email
FROM orders o
JOIN customers c ON c.id = o.customer_id
WHERE o.status = 'pending'
ORDER BY o.created_at DESC
LIMIT 20;

Как читать вывод EXPLAIN

MySQL EXPLAIN возвращает план выполнения запроса до его фактического запуска. Каждая строка соответствует одной операции (таблице или подзапросу). Анализ начинается с самых дорогих строк по полю rows.

Ключевые поля

  • type — тип доступа по убыванию стоимости: ALL (full scan) → index → range → ref → eq_ref → const/system. Цель — избавиться от ALL на больших таблицах.
  • key — фактически использованный индекс; NULL означает отсутствие подходящего индекса.
  • key_len — длина использованной части составного индекса в байтах; помогает понять, сколько колонок задействовано.
  • rows — оценка числа строк, которые MySQL планирует прочитать; реальное значение может отличаться.
  • filtered — процент строк, прошедших условие WHERE после чтения; низкое значение указывает на неселективный индекс.
  • Extra — дополнительные сигналы: Using filesort (лишняя сортировка), Using temporary (временная таблица), Using index (covering index — хорошо), Using where.

Практический алгоритм диагностики

  1. Включить slow query log: SET GLOBAL slow_query_log = 1; SET GLOBAL long_query_time = 1;
  2. Найти запрос в /var/log/mysql/slow.log или через pt-query-digest.
  3. Запустить EXPLAIN ANALYZE и найти строку с максимальным actual rows.
  4. Проверить type: если ALL — нужен индекс или переписывание запроса.
  5. Проверить Extra: Using filesort — добавить индекс на ORDER BY; Using temporary — пересмотреть GROUP BY или подзапрос.
  6. Создать индекс, повторить EXPLAIN ANALYZE, сравнить фактические метрики.

Полезные системные таблицы

-- Статистика ожиданий InnoDB (MySQL 8.0, performance_schema)
SELECT EVENT_NAME, COUNT_STAR, SUM_TIMER_WAIT/1e12 AS total_sec
FROM performance_schema.events_waits_summary_global_by_event_name
WHERE COUNT_STAR > 0
ORDER BY SUM_TIMER_WAIT DESC
LIMIT 10;

-- Текущие блокировки
SELECT * FROM performance_schema.data_locks\G

Подводные камни

  • EXPLAIN не запускает запрос (кроме ANALYZE) — оценки optimizer могут сильно расходиться с реальностью при устаревшей статистике; запустите ANALYZE TABLE перед диагностикой.
  • Индекс есть, но не используется — optimizer может предпочесть full scan, если таблица маленькая, или статистика некорректна; используйте FORCE INDEX(idx_name) для проверки гипотезы.
  • Using filesort не всегда плохо — на небольших выборках filesort быстрее обращения к индексу; ориентируйтесь на фактическое время из EXPLAIN ANALYZE, а не только на Extra.
  • Covering index и key_len — составной индекс (a, b, c) будет использован только до первого диапазонного условия; WHERE a=1 AND b>5 AND c=3 задействует только (a, b).
  • EXPLAIN на replica может отличаться — plan зависит от актуальности статистики и настроек optimizer_switch, которые могут расходиться между primary и replica.
  • Временные таблицы и UNION — EXPLAIN для UNION показывает несколько строк с <union1,2>; легко упустить дорогой шаг.
  • JSON/TREE формат в старых клиентах — FORMAT=JSON и FORMAT=TREE доступны только в MySQL 8.0+; на 5.7 выбросит синтаксическую ошибку.
  • EXPLAIN ANALYZE изменяет состояние — для DML-запросов (UPDATE, DELETE) EXPLAIN ANALYZE фактически выполняет операцию внутри транзакции, которую автоматически откатывает; не запускайте в production без осознания этого.

Частые вопросы на собеседовании

  • Как предотвратить SQL injection при работе с MySQL?
  • Как делать backup/restore и point-in-time recovery через binary logs?
  • Что такое MySQL и каковы его основные области применения?
  • Что такое транзакции в MySQL и как их использовать?

Типичные ошибки

  • Не уточнять storage engine и говорить о explain для медленного запроса так, будто MyISAM и InnoDB ведут себя одинаково.
  • Игнорировать implicit commit, autocommit, isolation level или binlog там, где они меняют ответ.
  • Описывать PostgreSQL-поведение как MySQL-поведение.
  • Забывать проверить план через EXPLAIN и фактическую версию MySQL.

Что проверяет интервьюер

  • Кандидат объясняет explain для медленного запроса через реальный механизм MySQL, а не общими словами.
  • Приводит корректный SQL или диагностический запрос для этой СУБД.
  • Называет ограничения, версионные отличия или эксплуатационные последствия.
  • Связывает ответ с проектированием приложения, производительностью, надежностью или безопасностью.

Как вы знаете этот вопрос?

Проверить себя по теме MySQL →

Источники

  • https://dev.mysql.com/doc/refman/8.4/en/explain.html
←Предыдущий вопросВ чём разница между движками хранения `InnoDB` и `MyISAM`?Следующий вопрос→Для каких типов нагрузок MySQL подходит лучше всего, а где стоит выбрать другую базу данных?

Связанные темы

MySQLperformance-analysisquery-debugging

Вакансии с этим навыком

  • Vice Senior Manager/Group Manager - Database Section, Cloud Services Department (CLSD)
  • Infrastructure Architect, Corporate IT - Global Architecture Section, Global IT Strategy Office (GITSO)
  • Senior Web Application Engineer, J.League Online Store - EC Expansion Development Department (ECEXD)
  • Data Engineer - FMCG Customer Strategy Section, FMCG Customer Strategy Department (C&M)
  • DX Solution Lead Engineer - Backoffice Business Support Section, Business Support Development Department (BSD)