Проверяет понимание различий между DELETE и TRUNCATE в SQL, включая журналирование транзакций и влияние на производительность.
DELETE и TRUNCATE — это две команды SQL для удаления данных, но они работают принципиально по-разному. DELETE — это DML-операция, которая удаляет строки по одной, фиксируя каждое удаление в журнале транзакций. TRUNCATE — это DDL-операция, которая освобождает страницы данных целиком, записывая в журнал только факт освобождения.
При DELETE каждая удалённая строка записывается в журнал транзакций, что позволяет восстановить данные при откате. Это делает операцию безопасной, но медленной при большом объёме данных. TRUNCATE журналирует только освобождение страниц, поэтому откат возможен, но только в рамках транзакции, и он менее детализирован.
TRUNCATE работает значительно быстрее, так как не обрабатывает каждую строку отдельно и не генерирует множество записей в журнале. DELETE, особенно без индексов, может быть крайне медленным на больших таблицах. Однако DELETE позволяет использовать WHERE для выборочного удаления, что TRUNCATE не поддерживает.
-- Удаление всех строк с условием
DELETE FROM users WHERE age < 18;
-- Удаление всех строк без условия
TRUNCATE TABLE users;Используйте DELETE, когда нужно удалить часть данных или требуется полное журналирование для отката. TRUNCATE выбирайте для быстрой очистки таблицы, когда не нужен фильтр и допустимо минимальное журналирование.