Чем отличаются DELETE и TRUNCATE? Нужно полностью очистить таблицу `logs` с 100М строк на проде — что выбрать?
SQLmediummiddle
Варианты ответа
TRUNCATE — быстрее в разы, сбрасывает auto-increment и не пишет в WAL построчно. DELETE — для условного удаления; TRUNCATE нельзя откатить транзакцией в MySQL (в PostgreSQL можно)
DELETE — быстрее на большой таблице, обходит WAL-логирование построчно и освобождает страницы сразу. TRUNCATE — для маленьких таблиц, на больших уступает из-за внутренней блокировки
Разницы по производительности нет — оба удаляют все строки через B-tree обход. TRUNCATE — лишь синтаксический сахар поверх DELETE, который понятнее выглядит в production SQL-коде
TRUNCATE физически удаляет файл таблицы и пересоздаёт схему — опасно на проде. DELETE помечает строки как удалённые и оставляет место для VACUUM — безопаснее при активных транзакциях
Разбор ответа
Подробный разбор с объяснением «почему правильный ответ верный» и почему остальные неверны — после регистрации.
2475 вопросов с разбором, quiz-режим с проверкой, AI-собес и подготовка к интервью аналитика.